#include <bits/stdc++.h>
using namespace std;
int mx, n, m, hh, now, flag, i, j, la, pr[21][200010], a[200010], f[500001],
    g[500001], aa[500001], nt[21][200001];
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  now = m;
  m = 0;
  m = -1;
  while (now) {
    aa[++m] = now;
    now /= 2;
  }
  aa[++m] = 0;
  for (i = 0; i <= m / 2; i++) swap(aa[i], aa[m - i]);
  for (j = 0; j <= m; j++) {
    la = n;
    nt[j][n] = n;
    for (i = n - 1; i >= 1; i--) {
      if (a[i + 1] - a[i] > aa[j]) {
        la = i;
        nt[j][i] = i;
        ;
      } else
        nt[j][i] = la;
    }
    la = 1;
    pr[j][1] = 1;
    for (i = 2; i <= n; i++)
      if (a[i] - a[i - 1] > aa[j]) {
        la = i;
        pr[j][i] = i;
      } else
        pr[j][i] = la;
  }
  mx = 1 << m + 1;
  m++;
  for (i = 0; i < mx - 1; i++) {
    now = f[i] + 1;
    for (j = 0; j < m; j++)
      if (!(i & (1 << j))) {
        hh = i | (1 << j);
        if (now > n)
          f[hh] = n;
        else
          f[hh] = max(f[hh], nt[j][now]);
      }
  }
  for (i = 0; i < mx; i++) g[i] = n + 1;
  for (i = 0; i < mx - 1; i++) {
    now = g[i] - 1;
    for (j = 0; j < m; j++)
      if (!(i & (1 << j))) {
        hh = i | (1 << j);
        if (now < 1)
          g[hh] = 1;
        else
          g[hh] = min(g[hh], pr[j][now]);
      }
  }
  la = 1;
  while (la <= n) {
    now = la;
    flag = 0;
    while (now <= n && pr[m - 1][now] == la) {
      now++;
    }
    now--;
    for (i = 0; i < mx; i++)
      if (!(i & (1 << m - 1))) {
        j = ((mx - 1) ^ (1 << m - 1)) ^ i;
        if (f[i] >= la - 1 && g[j] <= now + 1) {
          flag = 1;
          break;
        }
      }
    if (flag) {
      for (i = la; i <= now; i++) puts("Possible");
    } else {
      for (i = la; i <= now; i++) puts("Impossible");
    }
    la = now + 1;
  }
}
