#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int INF=0x3f3f3f3f;
const int MAXN=1000005;

int n,m,x[MAXN],cnt[20];
int l[20][MAXN],r[20][MAXN],f1[MAXN*2],f2[MAXN*2];
bool ans[MAXN];

int uf(int id,int pos){
	pos++;
	int p=upper_bound(l[id]+1,l[id]+cnt[id]+1,pos)-l[id]-1;
	if(p<=0) return pos;
	return max(r[id][p],pos-1);
}

int lf(int id,int pos){
	pos--;
	int p=lower_bound(r[id]+1,r[id]+cnt[id]+1,pos)-r[id];
	if(p>=cnt[id]+1) return pos;
	return min(l[id][p],pos+1);
}

int main(){

	memset(f2,0x3f,sizeof f2);
	scanf("%d%d",&n,&m);
	int tot=0;
	for(tot=0;(1<<tot)<=m;tot++);
	for(int i=1;i<=n;i++)
		scanf("%d",&x[i]);
	x[0]=-INF; x[n+1]=INF;
	for(int log=0;log<=tot;log++){
		int d=m>>log;
		cnt[log]=1;
		l[log][1]=1;
		for(int i=1;i<=n;i++){
			r[log][cnt[log]]=i;
			if(x[i+1]-x[i]>d){
				cnt[log]++;
				l[log][cnt[log]]=i+1;
			}
		}
		cnt[log]--;
	}
	if(cnt[0]>tot+1){
		for(int i=1;i<=n;i++) printf("Impossible\n");
		return 0;
	}
	int sum=(1<<(tot+1));
	f1[0]=0,f2[0]=n+1;
	for(int s=0;s<sum;s+=2)
		for(int i=0;i<=tot;i++){
			if(!(s&(1<<i))) continue;
			f1[s]=max(f1[s],uf(i,f1[s-(1<<i)]));
			f2[s]=min(f2[s],lf(i,f2[s-(1<<i)]));
		}
	for(int i=1;i<=cnt[0];i++){
		int ln=l[0][i],rn=r[0][i];
		for(int s1=0;s1<sum;s1+=2){
			int s2=sum-1-s1-1;
			int lpos=f1[s1];
			int rpos=f2[s2];
			if(lpos>=ln-1&&rpos<=rn+1){
				ans[i]=1;
				break;
			}
		}
	}
	int pos=1;
	for(int i=1;i<=n;i++){
		if(ans[pos]) printf("Possible\n");
		else printf("Impossible\n");
		if(x[i+1]-x[i]>m) pos++;
	}

	fclose(stdin);
	fclose(stdout);
}

