#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<ll> vll;
typedef pair<ll,ll> pll;
#define IN inline
#define RE register
#define F first
#define S second
#define N 400005
#define mod 998244353
#define INF 0x3f3f3f3f
int n,v,x[N],vl[22],k=0,pf[22][N],pb[22][N],dpf[N],dpb[N],lf[N];
int main(){
	scanf("%d%d",&n,&v);
	for(int i=v;i;i>>=1) vl[k++]=i;
	vl[k]=0;
	reverse(vl,vl+k+1);
	for(int i=1;i<=n;++i) scanf("%d",x+i);
	for(int i=0;i<=k;++i){
		pf[i][1]=1;
		for(int j=2;j<=n;++j){
			if(x[j]-x[j-1]<=vl[i]) pf[i][j]=pf[i][j-1];
			else pf[i][j]=j;
		}
		pf[i][n+1]=n;
		pb[i][n]=n;
		for(int j=n-1;j;--j){
			if(x[j+1]-x[j]<=vl[i]) pb[i][j]=pb[i][j+1];
			else pb[i][j]=j;
		}
		pb[i][0]=1;
	}
	dpf[0]=0;
	memset(dpb,63,sizeof(dpb));
	dpb[0]=n+1;
	for(int msk=0;msk<(1<<k);++msk){
		for(int i=0;i<k;++i) if(!(msk&1<<i)){
			dpf[msk|1<<i]=max(dpf[msk|1<<i],pb[i][dpf[msk]+1]);
			dpb[msk|1<<i]=min(dpb[msk|1<<i],pf[i][dpb[msk]-1]);
		}
	}
	for(int msk=0,dmsk=(1<<k)-1;dmsk>=0;++msk,--dmsk)
		lf[dpb[dmsk]-1]=max(lf[dpb[dmsk]-1],dpf[msk]+1);
	for(int i=1;i<=n;++i) lf[i]=max(lf[i],lf[i-1]);
	for(int i=1;i<=n;++i){
		if(lf[pb[k][i]]>=pf[k][i]) puts("Possible");
		else puts("Impossible");
	}
	return 0;
}