#include<iostream>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<map>
#include<iomanip>
#include<sstream>
#include<vector>
#include<stack>
#include<math.h>
#include<queue>
#include<complex>
using namespace std;

const long long int INF=99999999999999,inf=199999;
const long long int mod=1000000007;



long long int tmp,n,canmove[25]={},v,x[200005],leftdp[800000]={},rightdp[800000]={};
long long int leftnext[25][800005]={},rightnext[25][800005]={},two[30]={1};
long long int leftmemo[800005]={},rightmemo[800005]={};
long long int cou=0,k;

void leftsolve(){
    long long int count=0;
    queue<long long int>que,memoque;
    que.push(0);
    leftdp[0]=1;
    while(1){
        while(!que.empty()){
            for(int i=0;i<k;i++){
                if((que.front()/two[i]%2)==0){
                    leftdp[que.front()+two[i]]=max(leftdp[que.front()+two[i]],leftnext[i][leftdp[que.front()]]);
                    //次のループで被りが出ないように
                    if(leftmemo[que.front()+two[i]]==0){
                        memoque.push(que.front()+two[i]);
                        leftmemo[que.front()+two[i]]=1;
                    }
                }
            }
            que.pop();
        }
        while(!memoque.empty()){
            que.push(memoque.front());
            memoque.pop();
        }
        if(que.front()==two[k]-1){
            break;
        }
    }
}

void rightsolve(){
    long long int count=0;
    queue<long long int>que,memoque;
    que.push(0);
    
    while(1){
        while(!que.empty()){
            for(int i=0;i<k;i++){
                if((que.front()/two[i])%2==0){
                    rightdp[que.front()+two[i]]=min(rightdp[que.front()+two[i]],rightnext[i][rightdp[que.front()]]);
                   //次のループで被りが出ないように
                    if(rightmemo[que.front()+two[i]]==0){
                        memoque.push(que.front()+two[i]);
                        rightmemo[que.front()+two[i]]=1;
                    }
                    //cout<<que.front()<<" "<<two[i]<<" "<<endl;
                    //cout<<que.front()+two[i]<<" "<<rightdp[que.front()+two[i]]<<endl;
                }
            }
            que.pop();
        }
        while(!memoque.empty()){
            que.push(memoque.front());
            memoque.pop();
        }
        if(que.front()==two[k]-1){
            break;
        }
    }
}


int main() {
    int count=0;
    map<long long int,long long int>mp;
	cout << fixed << setprecision(10);
    cin>>n>>v;
    
    for(int i=1;i<=26;i++){
        two[i]=2*two[i-1];
    }


        for(int j=0;j<=799995;j++){
            rightdp[j]=n;
        }
    

    tmp=v;
    while(tmp!=0){
        canmove[cou]=tmp;
        cou++;
        tmp/=2;
    }
    k=cou+1;
    
    for(int i=1;i<=n;i++){
        cin>>x[i];
    }
    x[0]=-INF;
    x[n+1]=INF;

    for(int i=0;i<k;i++){
        tmp=0;
        for(int j=1;j<=n+1;j++){
            if(x[j]-x[j-1]>canmove[i]){
                for(int p=tmp;p<j;p++){
                    leftnext[i][p]=j;
                }
                tmp=j;
            }
        }

        tmp=n;
        for(int j=n;j>=0;j--){
            if(x[j+1]-x[j]>canmove[i]){
                for(int p=tmp;p>j;p--){
                    rightnext[i][p]=j;
                }
                tmp=j;
            }
        }
    }
    
    leftsolve();
    rightsolve();
    
    for(int i=1;i<=n;i++){
        //cout<<rightnext[0][i]<<" "<<canmove[0]<<endl;
    }
    


    
    for(int i=1;i<=n;i=leftnext[0][i]){
        bool key=true;
        //cout<<"........................"<<endl;
        for(int j=0;j<two[k];j+=2){
            //cout<<j<<" "<<(j^(two[k]-2))<<" "<<leftdp[j]<<" "<<rightnext[0][i]<<" "<<rightdp[(j^(two[k]-2))]<<" "<<leftnext[0][i]<<endl;
            if(leftdp[j]>rightnext[0][i]&&rightdp[(j^(two[k]-2))]<leftnext[0][i]){
                for(int p=rightnext[0][i]+1;p<=leftnext[0][i]-1;p++){
                    
                    //cout<<j<<" "<<(j^(two[k]-2))<<" "<<leftdp[j]<<" "<<rightnext[0][i]<<" "<<rightdp[(j^(two[k]-2))]<<" "<<leftnext[0][i]<<endl;
                    cout<<"Possible"<<endl;
                    count++;
                }
                key=false;
                break;
            }
        }
        if(key){
            
           
            for(int p=rightnext[0][i]+1;p<=leftnext[0][i]-1;p++){
                        cout<<"Impossible"<<endl;
                        count++;
            }
        }
    }
    //cout<<count;
} 


Measured memory_bytes: 167472