#include <bits/stdc++.h>
#define ctz __builtin_ctz

typedef std::pair <int, int> pr;
const int N = 200054, LN = 20, LN2 = 262154;

int n, V, ALL, cnt = 0;
int x[N];
int L[LN][N], R[LN][N];
int f[LN2], g[LN2];
pr seg[LN2], qry[LN2];

inline void up(int &x, const int y) {x < y ? x = y : 0;}
inline void down(int &x, const int y) {x > y ? x = y : 0;}

int main() {
	int i, j, S, layer;
	scanf("%d%d", &n, &V);
	for (i = 0; i < n; ++i) scanf("%d", x + i);
	for (layer = 0; ; V >>= 1, ++layer) {
		int *l = L[layer], *r = R[layer];
		for (*l = 0, i = 1; i < n; ++i) l[i] = (x[i] <= x[i - 1] + V ? l[i - 1] : i);
		for (--i, r[i] = i; --i >= 0; ) r[i] = (x[i] >= x[i + 1] - V ? r[i + 1] : i);
		if (!V) break;
	}
	ALL = ~(-1 << layer);
	std::fill(g, g + (ALL + 1), n - 1);
	for (i = 0; i <= ALL; ++i)
		for (S = ALL ^ i; S; S &= S - 1)
			j = ctz(S),
			up(f[i | 1 << j], f[i] == n ? n : R[j + 1][f[i]] + 1),
			down(g[i | 1 << j], (~g[i] ? L[j + 1][g[i]] : 0) - 1);
	for (i = 0; i <= ALL; ++i) seg[i] = pr(g[i], -f[ALL ^ i]);
	std::sort(seg, seg + (ALL + 1));
	qry[cnt++] = pr(seg->first, -seg->second);
	for (i = 1; i <= ALL; ++i)
		if (seg[i].second < seg[i - 1].second) qry[cnt++] = pr(seg[i].first, -seg[i].second);
	for (i = 0; i < n; ) {
		j = R[0][i], S = std::lower_bound(qry, qry + cnt, pr(j, INT_MAX)) - qry - 1;
		if (S >= 0 && i <= qry[S].second)
			for (; i <= j; ++i) puts("Possible");
		else
			for (; i <= j; ++i) puts("Impossible");
	}
	return 0;
}