#include <cstdio>
#include <algorithm>
using namespace std;
#define fr first
#define se second
#define pr pair<int,int>
#define mp make_pair
#define N 300000
int n,m,i,j,mask,a[N],l[20][N],r[20][N],k,f[N<<1],g[N<<1],id;
pr b[N<<1];
bool c[N];
int main()
{
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++) scanf("%d",&a[i]);int psz=0,jj=-1;
	for (j=m;j!=jj;jj=j,j>>=1){
		int lst=1;
		for (i=2;i<=n;i++) if (a[i]-a[i-1]>j){
			for (k=lst;k<i;k++) l[psz][k]=lst,r[psz][k]=i-1;
			lst=i;
		}
		for (k=lst;k<=n;k++) l[psz][k]=lst,r[psz][k]=n;
		psz++;
	}
	for (mask=0;mask<(1<<psz);mask++)
	for (i=0;i<psz;i++) if (!(mask&(1<<i))) f[mask|(1<<i)]=max(f[mask|(1<<i)],r[i][f[mask]+1]);
	for (mask=0;mask<(1<<psz);mask++) g[mask]=n+1;
	for (mask=0;mask<(1<<psz);mask++)
	for (i=0;i<psz;i++) if (!(mask&(1<<i))) g[mask|(1<<i)]=min(g[mask|(1<<i)],l[i][g[mask]-1]);
	for (mask=0;mask<(1<<psz);mask++) if (!(mask&1)) b[++id]=mp(g[mask],mask);
	for (i=1;i<=n;i++) b[++id]=mp(r[0][i]+1,i+(1<<psz));
	sort(b+1,b+id+1);int wtf=-1;
	for (i=1;i<=id;i++) if (b[i].se>(1<<psz)){
		b[i].se-=(1<<psz);
		if (wtf>=l[0][b[i].se]-1) c[b[i].se]=true;
	}else wtf=max(wtf,f[b[i].se^((1<<psz)-2)]);
	for (i=1;i<=n;i++) if (c[i]) puts("Possible");else puts("Impossible");
	return 0;
}