#include <cstdio>
#include <algorithm>
#define bi(x) (1<<(x-1))
#define rep(i,j,k) for (i=j;i<=k;i++)
#define down(i,j,k) for (i=j;i>=k;i--)
using namespace std;
const int N=2e5+5,K=20,Sn=1<<19;
int n,sn,V,v,k,i,j,lef,rig;
int a[N],c[N],l[N],r[N];
int rr[N][K],ls[Sn],rs[Sn];
void work(int *r,int *rs)
{
	int i,j,v=V;
	rep(j,1,k)
	{
		rr[n][j]=n;
		down(i,n-1,1)
			if (abs(a[i+1]-a[i])<=v) rr[i][j]=rr[i+1][j];
			else rr[i][j]=i;
		v>>=1;
	}
	rep(i,1,n) r[i]=rr[i][1];
	rep(i,0,sn) rs[i]=0;
	rep(i,0,sn-1)
	{
		rep(j,2,k)
			if (!(i&bi(j)))
				rs[i^bi(j)]=max(rs[i^bi(j)],rr[rs[i]+1][j]);
	}	
}
int main()
{
//	freopen("camel.in","r",stdin);
//	freopen("camel.out","w",stdout);
	scanf("%d%d",&n,&V);
	rep(i,1,n) scanf("%d",&a[i]);	
	for (k=1,v=V;v>0;v>>=1) k++;
	
	sn=(1<<k)-1;
	work(r,rs);
	reverse(a+1,a+1+n);
	work(l,ls);
	
	rep(i,1,n) l[i]=n-l[i]+1;
	reverse(l+1,l+1+n);
	
	rep(i,0,sn) {
		lef=rs[i]; rig=n-ls[sn^i]+1;
		if (rig-lef<=1) c[1]++;
		else if (r[lef+1]>=rig-1) {
			c[l[lef+1]]++; c[r[lef+1]+1]--;
		}
	}
	rep(i,1,n) {
		c[i]+=c[i-1];
		if (c[i]>0) printf("Possible\n");
		else printf("Impossible\n");
	}
	return 0;
}