#include <bits/stdc++.h>
using namespace std;
const int maxn = 200200, lg = 19;
int vi[lg], seg[lg][maxn], tol[lg][maxn], tor[lg][maxn], sl[lg][maxn],
    sr[lg][maxn], a[maxn];
int n, v, stk;
long long dpl[30][maxn], dpr[30][maxn];
int main() {
  cin >> n >> v;
  while (v) {
    vi[stk++] = v;
    v /= 2;
  }
  vi[stk++] = 0;
  reverse(vi, vi + stk);
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int j = 0; j < stk; j++) {
    for (int i = 1; i <= n; i++) {
      if (i == 1 || a[i] - a[i - 1] > vi[j])
        tol[j][i] = i, sl[j][i] = sl[j][i - 1] + 1;
      else
        tol[j][i] = tol[j][i - 1], sl[j][i] = sl[j][i - 1];
    }
    for (int i = n; i >= 1; i--) {
      if (i == n || a[i + 1] - a[i] > vi[j])
        tor[j][i] = i, sr[j][i] = sr[j][i + 1] + 1;
      else
        tor[j][i] = tor[j][i + 1], sr[j][i] = sr[j][i + 1];
    }
  }
  if (sr[0][n] > lg) {
    for (int i = 0; i < n; i++) {
      cout << "Impossible\n";
    }
    return 0;
  }
  const long long full = (1ll << 30) - 1;
  auto merge = [&](long long a, long long b) {
    while (a & b) b <<= 1;
    return a | b;
  };
  auto combine = [&](long long a, long long b) {
    while (b) {
      long long l = b & -b;
      a = merge(a, l);
      b ^= l;
    }
    return a;
  };
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < 30; j++) dpl[j][i] = full;
    for (int j = 0; j < stk; j++) {
      for (int k = 0; k < 30; k++) {
        long long q = merge(dpl[k][tol[j][i] - 1], 1 << j);
        int cn = min(29, __builtin_popcountll(q));
        dpl[cn][i] = min(dpl[cn][i], q);
      }
    }
  }
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j < 30; j++) dpr[j][i] = full;
    for (int j = 0; j < stk; j++) {
      for (int k = 0; k < 30; k++) {
        long long q = merge(dpr[k][tor[j][i] + 1], 1 << j);
        int cn = min(29, __builtin_popcountll(q));
        dpr[cn][i] = min(dpr[cn][i], q);
      }
    }
  }
  for (int i = 1, j = 1; i <= n; i = j) {
    while (j + 1 <= n && a[j + 1] - a[j] <= vi[stk - 1]) j++;
    bool possible = false;
    for (int k0 = 0; k0 < 30; k0++) {
      for (int k1 = 0; k1 < 30; k1++) {
        long long a = dpl[k0][i - 1], b = dpr[k1][j + 1];
        a = min(combine(a, b), combine(b, a));
        possible |= __builtin_popcountll(a) < stk && a < (1 << (stk - 1));
      }
    }
    for (int k = i; k <= j; k++) {
      if (possible)
        cout << "Possible\n";
      else
        cout << "Impossible\n";
    }
    j++;
  }
  return 0;
}
