#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, v[20], x[N], dep, dpl[N], dpr[N];
int blo[20][N], L[20][N], R[20][N];
void init(int dep) {
  int cnt = 0;
  blo[dep][1] = L[dep][1] = R[dep][1] = cnt = 1;
  for (int i = 2; i <= n; i++) {
    if (x[i - 1] + v[dep] >= x[i])
      blo[dep][i] = cnt, R[dep][cnt]++;
    else
      blo[dep][i] = ++cnt, L[dep][cnt] = R[dep][cnt] = i;
  }
  L[dep][0] = 1;
  R[dep][0] = n;
}
bool ans[N];
int main() {
  scanf("%d%d", &n, &v[0]);
  while (v[dep]) v[dep + 1] = v[dep] >> 1, dep++;
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  for (int i = 0; i <= dep; i++) init(i);
  int U = (1 << dep) - 1;
  for (int S = 1; S <= U; S++)
    for (int i = 0; i < dep; i++)
      if (S >> i & 1)
        dpl[S] = max(dpl[S], R[i + 1][blo[i + 1][dpl[S ^ (1 << i)] + 1]]);
  for (int S = 0; S <= U; S++) dpr[S] = n + 1;
  for (int S = 1; S <= U; S++)
    for (int i = 0; i < dep; i++)
      if (S >> i & 1)
        dpr[S] = min(dpr[S], L[i + 1][blo[i + 1][dpr[S ^ (1 << i)] - 1]]);
  if (blo[0][n] <= 20) {
    for (int i = 1; i <= blo[0][n]; i++) {
      int l = L[0][i], r = R[0][i];
      bool ok = 0;
      for (int S = 0; S <= U; S++)
        if (dpl[S] >= l - 1 && dpr[U ^ S] <= r + 1) ok = 1;
      if (!ok) continue;
      for (int j = l; j <= r; j++) ans[j] = 1;
    }
  }
  for (int i = 1; i <= n; i++) puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
