#include <bits/stdc++.h>
using namespace std;
const int M = 40;
const int N = 400010;
const int MAX = 1001000001;
int dep;
int maxn;
int ans[N];
int n, m, k;
int base[N];
int L[M][N];
int R[M][N];
int farfrl[N];
int farfrr[N];
pair<int, int> rg[N];
void Init_dp() {
  for (int j = m; j >= 0; j >>= 1) {
    R[++dep][n + 1] = n + 1;
    for (int i = 1; i <= n; ++i)
      L[dep][i] = (base[i] - base[i - 1] > j) ? i : L[dep][i - 1];
    for (int i = n; i >= 1; --i)
      R[dep][i] = (base[i + 1] - base[i] > j) ? i : R[dep][i + 1];
    if (!j) break;
  }
  return;
}
void Auxiliary_dp() {
  for (int i = 0; i <= maxn; i += 2)
    for (int j = 1; j <= dep; ++j)
      if (1 << (j - 1) & i) {
        farfrl[i] = max(farfrl[i], R[j][farfrl[i ^ (1 << (j - 1))] + 1]);
        farfrr[i] = min(farfrr[i], L[j][farfrr[i ^ (1 << (j - 1))] - 1]);
      }
  return;
}
int main() {
  cin >> n >> m;
  base[0] = -MAX;
  base[n + 1] = MAX;
  k = -1;
  for (int i = 1; i <= n; ++i) scanf("%d", &base[i]);
  Init_dp();
  for (int i = 1; i <= n; ++i) rg[i].first = L[1][i], rg[i].second = R[1][i];
  sort(rg + 1, rg + n + 1);
  maxn = (1 << dep) - 1;
  for (int i = 0; i <= maxn; ++i) farfrr[i] = n + 1;
  k += unique(rg + 1, rg + n + 1) - rg;
  Auxiliary_dp();
  for (int i = 1; i <= k; ++i)
    for (int j = 0; j <= maxn; j += 2)
      if (farfrl[j] + 1 >= rg[i].first &&
          farfrr[(maxn ^ j) ^ 1] - 1 <= rg[i].second) {
        for (int o = rg[i].first; o <= rg[i].second; ++o) ans[o] = 1;
        break;
      }
  for (int i = 1; i <= n; ++i) puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
