#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, mask, a[300000], l[20][300000], r[20][300000], k, f[300000],
    g[300000], id;
pair<int, int> b[300000 << 1];
bool c[300000];
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  int psz = 0, jj = -1;
  for (j = m; j != jj; jj = j, j >>= 1) {
    int lst = 1;
    for (i = 2; i <= n; i++)
      if (a[i] - a[i - 1] > j) {
        for (k = lst; k < i; k++) l[psz][k] = lst, r[psz][k] = i - 1;
        lst = i;
      }
    for (k = lst; k <= n; k++) l[psz][k] = lst, r[psz][k] = n;
    psz++;
  }
  for (mask = 0; mask < (1 << psz); mask++)
    for (i = 0; i < psz; i++)
      if (!(mask & (1 << i)))
        f[mask | (1 << i)] = max(f[mask | (1 << i)], r[i][f[mask] + 1]);
  for (mask = 0; mask < (1 << psz); mask++) g[mask] = n + 1;
  for (mask = 0; mask < (1 << psz); mask++)
    for (i = 0; i < psz; i++)
      if (!(mask & (1 << i)))
        g[mask | (1 << i)] = min(g[mask | (1 << i)], l[i][g[mask] - 1]);
  for (mask = 0; mask < (1 << psz); mask++)
    if (!(mask & 1)) b[++id] = make_pair(g[mask], mask);
  for (i = 1; i <= n; i++) b[++id] = make_pair(r[0][i] + 1, i + (1 << psz));
  sort(b + 1, b + id + 1);
  int wtf = -1;
  for (i = 1; i <= id; i++)
    if (b[i].second > (1 << psz)) {
      b[i].second -= (1 << psz);
      if (wtf >= l[0][b[i].second] - 1) c[b[i].second] = true;
    } else
      wtf = max(wtf, f[b[i].second ^ ((1 << psz) - 2)]);
  for (i = 1; i <= n; i++)
    if (c[i])
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
