#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, K = 20, Sn = 1 << 18;
int n, sn, V, v, k, i, j, lef, rig;
int a[N], c[N], l[N], r[N];
int rr[N][K], ls[Sn], rs[Sn];
void work(int *r, int *rs) {
  int i, j, v = V;
  for (j = 1; j <= k; j++) {
    rr[n][j] = n;
    for (i = n - 1; i >= 1; i--)
      if (abs(a[i + 1] - a[i]) <= v)
        rr[i][j] = rr[i + 1][j];
      else
        rr[i][j] = i;
    v >>= 1;
  }
  for (i = 1; i <= n; i++) r[i] = rr[i][1];
  for (i = 0; i <= sn; i++) rs[i] = 0;
  for (i = 0; i <= sn - 1; i++) {
    for (j = 2; j <= k; j++)
      if (!(i & (1 << (j - 1))))
        rs[i ^ (1 << (j - 1))] = max(rs[i ^ (1 << (j - 1))], rr[rs[i] + 1][j]);
  }
}
int main() {
  scanf("%d%d", &n, &V);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (k = 1, v = V; v > 0; v >>= 1) k++;
  sn = (1 << k) - 1;
  work(r, rs);
  reverse(a + 1, a + 1 + n);
  work(l, ls);
  for (i = 1; i <= n; i++) l[i] = n - l[i] + 1;
  reverse(l + 1, l + 1 + n);
  for (i = 0; i <= sn; i++) {
    lef = rs[i];
    rig = n - ls[sn ^ i] + 1;
    if (rig - lef <= 1)
      c[1]++;
    else if (r[lef + 1] >= rig - 1) {
      c[l[lef + 1]]++;
      c[r[lef + 1] + 1]--;
    }
  }
  for (i = 1; i <= n; i++) {
    c[i] += c[i - 1];
    if (c[i] > 0)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
  return 0;
}
