#include <bits/stdc++.h>
using namespace std;
int n, m, k, a[200100], l[200100][20], r[200100][20], f[200100], g[200100],
    ans[200100];
int getint() {
  char ch;
  while (!isdigit(ch = getchar()) && ch != '-')
    ;
  bool flag = ch == '-';
  if (flag) ch = getchar();
  int x = ch - '0';
  for (; isdigit(ch = getchar()); x = x * 10 + ch - '0')
    ;
  return flag ? -x : x;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) a[i] = getint();
  for (k = 0; m >> k; ++k)
    ;
  a[0] = -2e9, a[n + 1] = 2e9;
  for (int i = 0; i <= k; ++i) r[n + 1][i] = n;
  for (int i = 1; i <= n; ++i)
    for (int j = 0; j <= k; ++j) {
      l[i][j] = a[i] - a[i - 1] > m >> j ? i : l[i - 1][j];
      for (r[i][j] = max(r[i - 1][j], i); a[r[i][j] + 1] - a[r[i][j]] <= m >> j;
           ++r[i][j])
        ;
    }
  for (int i = 0; i <= (1 << k) - 1; ++i) 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)))) {
        int t = i | (1 << (j - 1));
        f[t] = max(f[t], r[f[i] + 1][j]);
        g[t] = min(g[t], l[g[i] - 1][j]);
      }
  for (int i = 0; i <= (1 << k) - 1; ++i) {
    int x = f[i], y = g[(1 << k) - 1 - i];
    if (x + 1 >= y)
      ++ans[1];
    else if (r[x + 1][0] + 1 >= y)
      ++ans[l[x + 1][0]], --ans[r[x + 1][0] + 1];
  }
  for (int i = 1; i <= n; ++i)
    puts((ans[i] += ans[i - 1]) ? "Possible" : "Impossible");
  return 0;
}
