#include<bits/stdc++.h>
#define rep(i, l, r) for(int i = (l), i##end = (r);i <= i##end;++i)
using std::cin; using std::cout;
const int maxn = 200200;
typedef long long ll;
const int mod = 998244353;
inline ll pow(ll a,int b,int ans = 1) {
	for(;b;b >>= 1,a = a * a % mod) if(b & 1)
		ans = ans * a % mod;
	return ans;
}
inline ll inverse(int x){ return pow(x, mod - 2); }
int n, v, lg;
typedef std::pair<int, int> pr;
int g0[1 << 19], g1[1 << 19];
int x[maxn], ans[maxn];
std::vector<pr> vec[233];
inline void init(std::vector<pr> & v,int d) {
	int l = 1;
	for(int i = 2;i <= n;++i) if(x[i] - x[i - 1] > d)
		v.emplace_back(l, i - 1), l = i;
	v.emplace_back(l, n);
}
inline void up(int & x,int y) { if(x < y) x = y; }
inline void down(int & x,int y) { if(x > y) x = y; }
int main() {
	std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n >> v;
	rep(i, 1, n) cin >> x[i];
	for(;v >> lg;++lg) if(v >> lg) init(vec[lg], v >> lg);
	init(vec[lg++], 0);
	if(vec[0].size() < 20) {
		std::fill(g1, g1 + (1 << lg), n + 1);
		rep(i, 0, (1 << lg) - 1) {
			rep(j, 1, lg - 1) if((i >> j & 1) == 0){
				int l = 0, r = vec[j].size();
				for(;l + 1 != r;) (vec[j][l + r >> 1].first <= g0[i] + 1 ? l : r) = l + r >> 1;
				up(g0[i | 1 << j], vec[j][l].second), l = -1, r = vec[j].size() - 1;
				for(;l + 1 != r;) (vec[j][l + r >> 1].second >= g1[i] - 1 ? r : l) = l + r >> 1;
				down(g1[i | 1 << j], vec[j][r].first);
			}
		}
		for(pr i : *vec) {
			for(int j = 0;j < 1 << lg;j += 2) {
				if(g0[j] >= i.first - 1 && i.second + 1 >= g1[~j & (1 << lg) - 1 & -2]){
					std::fill(ans + i.first, ans + i.second + 1, 1);
					break;
				}
			}
		}
	}
	rep(i, 1, n) {
		cout << (ans[i] ? "Possible" : "Impossible") << '\n';
	}
}
