#include <bits/stdc++.h>
using namespace std;
int mark[401000];
int lb[401000][20], rb[401000][20];
int L[401000], R[401000], fa[401000], p[401000];
int x[401000];
int v[20];
int fl[401000], fr[401000];
int tp;
int n, m;
int find(int a) { return (fa[a] == a ? a : (fa[a] = find(fa[a]))); }
bool cmp(int a, int b) { return (x[a + 1] - x[a] < x[b + 1] - x[b]); }
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  tp = 0;
  for (; m; m >>= 1) v[tp++] = m;
  v[tp++] = 0;
  for (int i = 1; i <= n; i++) L[i] = R[i] = fa[i] = i;
  for (int i = 1; i < n; i++) p[i] = i;
  int q = 1;
  sort(p + 1, p + n, cmp);
  for (int t = tp - 1; t >= 0; t--) {
    while (q < n && x[p[q] + 1] - x[p[q]] <= v[t]) {
      int a = p[q], b = p[q] + 1;
      a = find(a);
      b = find(b);
      R[fa[a]] = R[fa[b]];
      fa[fa[b]] = fa[a];
      q++;
    }
    for (int i = 1; i <= n; i++) {
      lb[i][t] = L[find(i)];
      rb[i][t] = R[find(i)];
    }
  }
  for (int u = 0; u < tp; u++) {
    lb[n + 1][u] = n;
    rb[0][u] = 1;
  }
  for (int st = 0; st < (1 << tp); st++) {
    fr[st] = n + 1;
    for (int u = 0; u < tp; u++) {
      if (!(st >> u & 1)) continue;
      fl[st] = max(fl[st], rb[fl[st ^ (1 << u)] + 1][u]);
      fr[st] = min(fr[st], lb[fr[st ^ (1 << u)] - 1][u]);
    }
  }
  for (int st = 0; st < (1 << tp); st++) {
    if (st & 1) continue;
    int l = fl[st];
    int r = fr[((1 << tp) - 1) ^ 1 ^ st];
    if (l >= r - 1) {
      mark[1]++;
      continue;
    }
    if (rb[l + 1][0] >= r - 1) {
      mark[lb[l + 1][0]]++;
      mark[rb[l + 1][0] + 1]--;
    }
  }
  for (int i = 1; i <= n; i++) {
    mark[i] += mark[i - 1];
    if (mark[i] > 0)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
  return 0;
}
