#include <bits/stdc++.h>
template <typename T>
inline void check_min(T a, T &b) {
  if (a < b) b = a;
}
template <typename T>
inline void check_max(T a, T &b) {
  if (a > b) b = a;
}
namespace yy {
const int N = 201000, M = N * 20;
struct bit {
  bool s[N];
  inline int lowbit(int first) { return first & (-first); }
  void init() { memset(s, 0, sizeof(s)); }
  void inc(int p) {
    p++;
    for (; p < N; p += lowbit(p)) s[p] = 1;
  }
  bool query(int p) {
    p++;
    bool ret = 0;
    for (; p; p -= lowbit(p)) ret |= s[p];
    return ret;
  }
} T;
struct node {
  int L, R, ty;
  node(int a = 0, int b = 0, int c = 0) : L(a), R(b), ty(c) {}
  bool operator<(const node &h) const {
    return L == h.L ? R == h.R ? ty > h.ty : R < h.R : L > h.L;
  }
};
node s[M];
int begin[N], next[M * 2], to[M * 2], w[M * 2];
int pos[N];
int n, m, e, tot, cnt, S;
void add(int first, int second, int z, bool k = 1) {
  to[++e] = second;
  next[e] = begin[first];
  begin[first] = e;
  w[e] = z;
  if (k) add(second, first, z, 0);
}
void work(int dis, int dep) {
  for (int L = 1, R; L <= n; L = R + 1) {
    for (R = L; R < n && pos[R + 1] - pos[R] <= dis; R++)
      ;
    if (dep > 1)
      add(L, R, dep - 1);
    else
      s[++tot] = node(L, R, 1);
  }
}
void initialize() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", pos + i);
  tot = 0, cnt = 1;
  for (int tmp = m;; tmp /= 2, cnt++) {
    work(tmp, cnt);
    if (!tmp) break;
  }
  S = 1 << (cnt - 1);
}
inline int ins(int k, int i) { return k | (1 << (i - 1)); }
int f[N * 4], g[N * 4];
void dp() {
  for (int i = 0; i < S; i++) f[i] = 0, g[i] = n + 1;
  for (int k = 0; k < S; k++) {
    int p = f[k] + 1;
    for (int i = begin[p]; i; i = next[i])
      if (!(k & (1 << (w[i] - 1)))) check_max(to[i], f[ins(k, w[i])]);
    p = g[k] - 1;
    for (int i = begin[p]; i; i = next[i])
      if (!(k & (1 << (w[i] - 1)))) check_min(to[i], g[ins(k, w[i])]);
  }
}
bool ans[N];
void solve() {
  initialize();
  dp();
  for (int k = 0; k < S; k++) s[++tot] = node(f[k] + 1, g[S - k - 1] - 1, 0);
  std::sort(s + 1, s + tot + 1);
  T.init();
  for (int i = 1; i <= tot; i++) {
    if (!s[i].ty)
      T.inc(s[i].R);
    else if (T.query(s[i].R)) {
      for (int j = s[i].L; j <= s[i].R; j++) ans[j] = 1;
    }
  }
  for (int i = 1; i <= n; i++)
    printf("%s\n", ans[i] ? "Possible" : "Impossible");
}
}  // namespace yy
int main() {
  yy::solve();
  return 0;
}
