#include<bits/stdc++.h>
#define N 600009
using namespace std;

int n,m,cnt,a[N],b[109],p[20][N],q[20][N],f[N],g[N];
struct node{ int x,y; }c[N];
bool cmp(node u,node v){ return u.y<v.y; }
int main(){
	scanf("%d%d",&n,&m);
	int i,j,k;
	for (i=1; i<=n; i++) scanf("%d",&a[i]);
	for (; m; m>>=1) b[++cnt]=m; cnt++;
	for (i=1; i<=(cnt>>1); i++) swap(b[i],b[cnt-i+1]);
	for (i=1; i<=cnt; i++){
		p[i][n]=n; q[i][1]=1;
		for (j=n-1; j; j--) p[i][j]=(a[j+1]-a[j]<=b[i]?p[i][j+1]:j);
		for (j=2; j<=n; j++) q[i][j]=(a[j]-a[j-1]<=b[i]?q[i][j-1]:j);
	}
	m=1<<cnt-1;
	for (i=0; i<m; i++) g[i]=n+1;
	for (i=1; i<m; i++)
		for (j=1; j<cnt; j++) if (i>>j-1&1){
			k=i^1<<j-1;
			f[i]=max(f[i],f[k]<n?p[j][f[k]+1]:n);
			g[i]=min(g[i],g[k]>1?q[j][g[k]-1]:1);
		}
	for (i=0; i<m; i++)
		if (f[i]+1<g[m-1^i]) c[i+1]=(node){f[i]+1,g[m-1^i]-1};
		else{
			for (i=1; i<=n; i++) puts("Possible"); return 0;
		}
	sort(c+1,c+m+1,cmp);
	for (i=j=1,k=0; i<=n; i++){
		for (; j<=m && c[j].y<=p[cnt][i]; j++)
			k=max(k,c[j].x);
		puts(k<q[cnt][i]?"Impossible":"Possible");
	}
	return 0;
}
