#include<bits/stdc++.h>
 
using namespace std;
 
const int N=200005,M=20,L=266666;
 
int n,m,x[N],U,dp1[L],dp2[L];
int nex[M][N],pre[M][N],sz[M],k;
int mx[N];
 
void make(int V,int*nx,int*pr){
	nx[n]=n;
	for(int i=n-1;i>=1;i--)if(x[i+1]-x[i]>V)nx[i]=i;else nx[i]=nx[i+1];
	pr[1]=1;
	for(int i=2;i<=n;i++)if(x[i]-x[i-1]>V)pr[i]=i;else pr[i]=pr[i-1];
}
 
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&x[i]);
	for(int i=m>>1;i>=1;i>>=1)sz[k++]=i;sz[k++]=0;
	sz[k]=m;
	for(int i=0;i<=k;i++)make(sz[i],nex[i],pre[i]);
	U=1<<k;
	for(int i=0;i<U;i++)dp1[i]=0,dp2[i]=n+1;
	for(int i=0;i<U;i++)for(int j=0;j<k;j++)
		if(~i>>j&1){
			if(dp1[i]==n)dp1[i|1<<j]=n;
			else dp1[i|1<<j]=max(dp1[i|1<<j],nex[j][dp1[i]+1]);
			if(dp2[i]==1)dp2[i|1<<j]=1;
			else dp2[i|1<<j]=min(dp2[i|1<<j],pre[j][dp2[i]-1]);
		}
	memset(mx,-1,sizeof(mx));
	for(int i=0;i<U;i++){
		mx[dp2[i]]=max(mx[dp2[i]],dp1[(U-1)^i]);
	}
	for(int i=1;i<=n+1;i++)
		mx[i]=max(mx[i],mx[i-1]);
	for(int i=1;i<=n;i++){
		if(mx[nex[k][i]+1]>=pre[k][i]-1)
			puts("Possible");
		else
			puts("Impossible");
	}
	return 0;
}