//Have a nice day:)
#include<bits/stdc++.h>
using namespace std;
#define LL long long

inline int read();

typedef pair<int,int> pii;
const int maxn=2e5+5;

int n, size, depth;
int p[maxn], d[maxn], fr[1<<20], bk[1<<20], far[maxn], lef[maxn], rig[maxn], pos[maxn];
vector<pii>v[maxn];

void Work()
{
    n=read(), size=read();
    for(int i=1; i<=n; ++i) p[i]=read();

    d[depth=1]=size;
    while(size) size/=2, d[++depth]=size;

    for(int i=1; i<=n; ++i) v[1].push_back(make_pair(i,i));
    for(int i=2; i<=depth; ++i)
    {
        v[i].push_back(v[i-1][0]);
        for(int j=1, lim=v[i-1].size()-1; j<=lim; ++j)
        {
            if(p[v[i-1][j].first]-p[v[i][v[i].size()-1].second]<=d[depth+1-i])
                v[i][v[i].size()-1].second=v[i-1][j].second;
            else v[i].push_back(v[i-1][j]);
        }
    //    for(int j=v[i].size()-1; j>=0; --j)
    //        cout<<"("<<v[i][j].first<<' '<<v[i][j].second<<")"<<' ';
    //    cout<<endl;
    }

    memset(fr, -1, sizeof(fr)); fr[0]=0;
    for(int i=0, lim=(1<<(depth-1))-1; i<=lim; ++i)
    {
        if(fr[i]==-1) continue;
        for(int j=1; j<=depth-1; ++j)
        {
            if((i>>(j-1))&1) continue;
            int l=0, r=v[j].size()-1, ans=-1;
            while(l<=r)
            {
                int mid=(l+r)>>1;
                if(v[j][mid].first<=fr[i]+1) ans=mid, l=mid+1;
                else r=mid-1;
            }
            if(ans==-1) fr[i|(1<<(j-1))]=max(fr[i|(1<<(j-1))], fr[i]);
            else fr[i|(1<<(j-1))]=max(fr[i|(1<<(j-1))], max(fr[i], v[j][ans].second));
        }
    }

    memset(bk, 127, sizeof(bk)); bk[0]=n+1;
    for(int i=0, lim=(1<<(depth-1))-1; i<=lim; ++i)
    {
        if(bk[i]==bk[lim+1]) continue;
        for(int j=1; j<=depth-1; ++j)
        {
            if((i>>(j-1))&1) continue;
            int l=0, r=v[j].size()-1, ans=-1;
            while(l<=r)
            {
                int mid=(l+r)>>1;
                if(v[j][mid].second>=bk[i]-1) ans=mid, r=mid-1;
                else l=mid+1;
            }
            if(ans==-1) bk[i|(1<<(j-1))]=min(bk[i|(1<<(j-1))], bk[i]);
            else bk[i|(1<<(j-1))]=min(bk[i|(1<<(j-1))], min(bk[i], v[j][ans].first));
        }
    }

    memset(far, 128, sizeof(far));
    for(int i=v[depth].size()-1; i>=0; --i) 
    {
        lef[i]=v[depth][i].first, rig[i]=v[depth][i].second;
        for(int j=lef[i]; j<=rig[i]; ++j) pos[j]=i;
    }

    for(int i=(1<<(depth-1))-1; i>=0; --i)
    {
    //cout<<i<<' '<<fr[i]<<' '<<bk[i]<<endl;
        far[bk[i]]=max(far[bk[i]], fr[(1<<(depth-1))-1-i]);
    }
    for(int i=1; i<=n; ++i)
    {
        far[i]=max(far[i], far[i-1]);
  //      cout<<i<<' '<<far[i]<<endl;
    }

    for(int i=1; i<=n; ++i)
    {
   //     cout<<far[rig[pos[i]]]<<' '<<lef[pos[i]]<<endl;
        if(far[rig[pos[i]]+1]+1>=lef[pos[i]]) printf("Possible\n");
        else printf("Impossible\n");
    }
}

int main()
{

    Work();

    return 0;
}

inline int read()
{
    char c; bool type=1;
    while((c=getchar())<'0' || c>'9')
        if(c=='-') type=0;
    int ans=c^48;
    while((c=getchar())>='0' && c<='9')
        ans=(ans<<3)+(ans<<1)+(c^48);
    return type?ans:-ans;
}



Measured memory_bytes: 22640