#include<bits/stdc++.h>
#define ll long long
#define re register
#define ull usigned ll
using namespace std;
inline int read(){
	int s=0,t=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
	return s*t;
}
const int N=(1<<19);
int n,m,U,Num,s[19],p[N];
int L[19][N],R[19][N],dl[N],dr[N];
int Calc(int m){
	int lim=0;
	while(m)s[lim++]=m,m>>=1;
	return ++lim;
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	n=read(),m=Calc(read()),U=(1<<m)-1;
	for(int i=1;i<=n;i++)p[i]=read();
	for(int k=0;k<m;k++){
		for(int i=1,j=0;i<=n;){
			for(j=i;j<n&&p[j+1]-p[j]<=s[k];j++);
			for(;i<=j;i++)R[k][i]=j;
		}
		for(int i=n,j=0;i>=1;){
			for(j=i;j>1&&p[j]-p[j-1]<=s[k];j--);
			for(;i>=j;i--)L[k][i]=j;
		}		
	}
	
	for(int S=0;S<=U;S++)dl[S]=0,dr[S]=n+1;
	for(int S=0;S<=U;S++){
		for(int i=0;i<m;i++)
		if(!(S>>i&1)){
			int T=S|(1<<i);
			dl[T]=max(dl[T],min(n,R[i][dl[S]+1]));
			dr[T]=min(dr[T],max(1,L[i][dr[S]-1]));
		}
	}
	for(int i=1;i<=n;i=R[0][i]+1)Num++;
	if(Num>m){for(int i=1;i<=n;i++)puts("Impossible");return 0;}
	for(int i=1;i<=n;i=R[0][i]+1){
		int l=i,r=R[0][i],t=0;
		for(int S=0;S<=U;S++)
		if((S&U-1)==S){if(dl[S]>=l-1&&dr[U-1^S]<=r+1)t=1;}
		for(int j=l;j<=r;j++)puts(t?"Possible":"Impossible");
	}
	return 0;
}