#include <bits/stdc++.h>
using namespace std;
int N, V;
int X[200005];
int Log2[200005];
int MaxL[20][200005], MaxR[20][200005];
int L[(1 << 20) + 5], R[(1 << 20) + 5];
int Val[30];
bool Use[200005];
void Read() {
  cin >> N >> V;
  for (int i = 1; i <= N; i++) cin >> X[i];
}
void precalcLog2() {
  for (int i = 2; i <= V; i++) Log2[i] = Log2[i / 2] + 1;
  int l = Log2[V], x = V;
  while (x > 0) {
    Val[l] = x;
    x /= 2;
    --l;
  }
}
void precalcColour() {
  for (int j = 0; j <= Log2[V]; j++) {
    int Max = 0;
    int c = 1;
    int last = 1;
    for (int i = 1; i <= N; i++) {
      if (Max > Val[j]) {
        Max = 0;
        last = i;
      }
      MaxL[j][i] = last;
      Max = max(Max, X[i + 1] - X[i]);
    }
    Max = 0;
    last = N;
    for (int i = N; i >= 1; i--) {
      if (Max > Val[j]) {
        Max = 0;
        last = i;
      }
      MaxR[j][i] = last;
      Max = max(Max, X[i] - X[i - 1]);
    }
  }
}
void precalcLR() {
  int limit = (1 << (Log2[V]));
  for (int i = 0; i < limit; i++) {
    for (int j = 0; j < Log2[V]; j++) {
      if ((i & (1 << j)) != 0) {
        L[i] = max(L[i], MaxR[j][L[(i ^ (1 << j))] + 1]);
        R[i] = max(R[i], MaxL[j][R[(i ^ (1 << j))] + 1]);
      }
    }
  }
}
void checkPos(int pos) {
  int left = MaxL[Log2[V]][pos];
  int right = MaxR[Log2[V]][pos];
  int mask = (1 << (Log2[V])) - 1;
  int ans = 0;
  int dist = right - left + 1;
  for (int i = 0; i < (1 << (Log2[V])); i++) {
    int c = (mask ^ i);
    if (N - dist <= R[c] + L[i] + 1) {
      ans = 1;
      break;
    }
  }
  for (int i = left; i <= right; i++) {
    Use[i] = 1;
    if (ans == 1)
      cout << "Possible\n";
    else
      cout << "Impossible\n";
  }
}
int Solve() {
  for (int i = 1; i <= N; i++)
    if (Use[i] == 0) {
      checkPos(i);
    }
}
int main() {
  Read();
  precalcLog2();
  precalcColour();
  precalcLR();
  Solve();
  return 0;
}
