#include <bits/stdc++.h>
using namespace std;
inline void ri(int &x) {
  x = 0;
  static char c;
  bool t = 0;
  while (c = getchar(), c < '0' || c > '9')
    if (c == '-')
      t = 1;
    else
      t = 0;
  do x = x * 10 + c - '0';
  while (c = getchar(), c >= '0' && c <= '9');
  if (t) x = -x;
}
const int N = 200024;
int val[35], tot;
int a[N], f[N], nf[N];
int l[N], r[N], L[N], R[N], gs;
int nl[N], nr[N], nL[N], nR[N], ngs;
int ans[N];
pair<int, int> b[N];
int main() {
  int i, j, n, v;
  ri(n);
  ri(v);
  for (i = 1; i <= n; ++i) ri(a[i]);
  while (v) {
    val[++tot] = v;
    v >>= 1;
  }
  for (i = 1; i <= n; ++i) f[i] = 1, l[i] = r[i] = a[i], L[i] = i, R[i] = i;
  gs = n;
  for (i = tot; i; --i) {
    ngs = 0;
    for (j = 1; j <= gs;) {
      int h = j + 1, s = f[j], mn = f[j];
      while (h <= gs && l[h] - r[h - 1] <= val[i]) {
        s += f[h];
        mn = min(mn, f[h]);
        ++h;
      }
      nl[++ngs] = l[j];
      nr[ngs] = r[h - 1];
      nf[ngs] = s - mn + 1;
      nL[ngs] = L[j];
      nR[ngs] = R[h - 1];
      j = h;
    }
    gs = ngs;
    for (j = 1; j <= gs; ++j) {
      l[j] = nl[j];
      r[j] = nr[j];
      f[j] = nf[j];
      L[j] = nL[j];
      R[j] = nR[j];
    }
  }
  int s = 0;
  for (i = 1; i <= gs; ++i) s += f[i];
  for (i = 1; i <= gs; ++i)
    if (s - f[i] + 1 <= tot + 1)
      for (j = L[i]; j <= R[i]; ++j) ans[j] = 1;
  for (i = 1; i <= n; ++i)
    if (ans[i])
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
