#include <bits/stdc++.h>
#define maxn 801000
using namespace std;

int mark[maxn];
int lb[maxn][21], rb[maxn][21];
int L[maxn], R[maxn], fa[maxn], p[maxn];
int x[maxn];
int v[21];
int fl[maxn], fr[maxn];
int tp;
int n, m;

int find(int a) {
	return (fa[a] == a ? a : (fa[a] = find(fa[a])));
}

bool cmp(int a, int b) {
	return (x[a + 1] - x[a] < x[b + 1] - x[b]);
}

int main() {
	scanf("%d %d",&n,&m);
	for (int i = 1; i <= n; i++) scanf("%d",&x[i]);
	tp = 0;
	for (; m; m >>= 1) v[tp++] = m;
	v[tp++] = 0;
	for (int i = 1; i <= n; i++) L[i] = R[i] = fa[i] = i;
	for (int i = 1; i < n; i++) p[i] = i;
	int q = 1;
	sort(p + 1, p + n, cmp);	
	for (int t = tp - 1; t >= 0; t--) {
		while (q < n && x[p[q] + 1] - x[p[q]] <= v[t]) {
			int a = p[q], b = p[q] + 1;
			a = find(a); b = find(b);
			R[fa[a]] = R[fa[b]];
			fa[fa[b]] = fa[a];
			q++;
		}
		for (int i = 1; i <= n; i++) {
			lb[i][t] = L[find(i)];
			rb[i][t] = R[find(i)];
		}
	}

	for (int u = 0; u < tp; u++) {
		lb[n + 1][u] = n;
		rb[0][u] = 1;
	}

	for (int st = 0; st < (1 << tp); st++) {
		fr[st] = n + 1;
		for (int u = 0; u < tp; u++) {
			if (!(st >> u & 1)) continue;
			fl[st] = max(fl[st], rb[fl[st ^ (1 << u)] + 1][u]);
			fr[st] = min(fr[st], lb[fr[st ^ (1 << u)] - 1][u]);
		}
	}

	for (int st = 0; st < (1 << tp); st++) {
		if (st & 1) continue;
		int l = fl[st];
		int r = fr[((1 << tp) - 1) ^ 1 ^ st];
		if (l >= r - 1) { mark[1]++; continue; }
		if (rb[l + 1][0] >= r - 1) {
			mark[lb[l + 1][0]]++;
			mark[rb[l + 1][0] + 1]--;
		}
	}

	for (int i = 1; i <= n; i++) {
		mark[i] += mark[i - 1];
		if (mark[i] > 0) printf("Possible\n");
		else printf("Impossible\n");
	}
	return 0;
}