#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int a[N], L[25][N], R[25][N], f[N], g[N], S[N];
int main() {
  ios::sync_with_stdio(false);
  int n, m, k, cnt = 0;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    if (i != 1 && a[i] - a[i - 1] > m) ++cnt;
  }
  k = log2(m) + 2;
  if (cnt > k) {
    for (int i = 1; i <= n; i++) cout << "Impossible" << endl;
    return 0;
  }
  int s = m;
  for (int i = 0; i < k; i++) {
    L[i][1] = 1;
    R[i][n] = n;
    for (int j = 2; j <= n; j++) {
      if (a[j] - a[j - 1] > s)
        L[i][j] = j;
      else
        L[i][j] = L[i][j - 1];
    }
    for (int j = n - 1; j >= 1; j--) {
      if (a[j + 1] - a[j] > s)
        R[i][j] = j;
      else
        R[i][j] = R[i][j + 1];
    }
    s /= 2;
  }
  for (int i = 0; i < (1 << k); i++) {
    f[i] = 0;
    g[i] = n + 1;
  }
  for (int i = 0; i < (1 << (k - 1)); i++) {
    for (int j = 1; j < k; j++) {
      if (!(i & (1 << (j - 1)))) {
        if (f[i] == n)
          f[i | (1 << (j - 1))] = n;
        else
          f[i | (1 << (j - 1))] = max(f[i | (1 << (j - 1))], R[j][f[i] + 1]);
        if (g[i] == 1)
          g[i | (1 << (j - 1))] = 1;
        else
          g[i | (1 << (j - 1))] = min(g[i | (1 << (j - 1))], L[j][g[i] - 1]);
      }
    }
  }
  for (int i = 0; i <= n; i++) S[i] = 0x7f7f7f7f;
  for (int i = 0; i < (1 << (k - 1)); i++) {
    S[f[i]] = min(S[f[i]], g[((1 << (k - 1)) - 1) ^ i]);
  }
  for (int i = n - 1; i >= 0; i--) S[i] = min(S[i], S[i + 1]);
  for (int i = 1; i <= n; i++) {
    if (S[L[0][i] - 1] <= R[0][i] + 1)
      cout << "Possible" << endl;
    else
      cout << "Impossible" << endl;
  }
  return 0;
}
