#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f, N = 2e5 + 6, S = (1 << 20) + 5;
inline int read() {
	int x = 0, f = 1; char ch = getchar();
	while(!(ch >= '0' && ch <= '9')) {if(ch == '-') f = -1; ch = getchar();}
	while(ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
	return x * f;
}
int a[N], L[20][N], R[20][N], l[N<<4], r[N<<4];
pair <int, int> s[N];
bool an[N];
int main() {
	int n = read(), m = read(), d;
	for(int i = 1; i <= n; i++) a[i] = read();
	a[0] = -INF - m - 1, a[n+1] = INF + m + 1;
	for(int i = m; ~i; i >>= 1, d++) {
		R[d][n+1] = n+1;
		for(int j = 1; j <= n; j++)
			L[d][j] = a[j] - a[j-1] <= i ? L[d][j-1] : j;
		for(int j = n; j; j--)
			R[d][j] = a[j+1] - a[j] <= i ? R[d][j+1] : j;
		if(!i) {d++; break;}
	}
	for(int i = 1; i <= n; i++) s[i] = make_pair(L[0][i], R[0][i]);
	int cnt = unique(s + 1, s + 1 + n) - s - 1;
	for(int i = 0; i < 1 << d; i++) r[i] = n + 1;
	for(int i = 0; i < 1 << d; i += 2)
		for(int j = 0; j < d; j++)
			if(i & 1 << j)
				l[i] = max(l[i], R[j][l[i^(1<<j)]+1]),
				r[i] = min(r[i], L[j][r[i^(1<<j)]-1]);
	if(cnt <= d) for(int i = 1; i <= cnt; i++)
		for(int j = 0; j < 1 << d; j += 2)
			if(l[j] >= s[i].first - 1 && r[(1<<d)-j-2] <= s[i].second + 1) {
				for(int j = s[i].first; j <= s[i].second; j++) an[j] = 1;
				break;
			}
	for(int i = 1; i <= n; i++)
		puts(an[i] ? "Possible" : "Impossible");
	return 0;
}
