#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define repu(i,x,y) for (int i=x; i<=y; ++i)
using namespace std;

int n,m,k,a[200100],l[200100][20],r[200100][20],f[270000],g[270000],ans[200100];

int getint()
{
    char ch;
    while (!isdigit(ch=getchar()) && ch!='-');
    bool flag=ch=='-';
    if (flag)
        ch=getchar();
    int x=ch-'0';
    for (; isdigit(ch=getchar()); x=x*10+ch-'0');
    return flag?-x:x;
}

int main()
{
    scanf("%d%d",&n,&m);
    repu(i,1,n)
        a[i]=getint();
    for (k=0; m>>k; ++k);
    a[0]=a[1]-m-1,a[n+1]=a[n]+m+1;
    repu(i,0,k)
        r[n+1][i]=n;
    repu(i,1,n)
        repu(j,0,k)
        {
            l[i][j]=a[i]-a[i-1]>m>>j?i:l[i-1][j];
            for (r[i][j]=max(r[i-1][j],i); a[r[i][j]+1]-a[r[i][j]]<=m>>j; ++r[i][j]);
        }
    repu(i,0,(1<<k)-1)
        g[i]=n+1;
    repu(i,0,(1<<k)-1)
        repu(j,1,k)
            if (!(i&(1<<(j-1))))
            {
                int t=i|(1<<(j-1));
                f[t]=max(f[t],r[f[i]+1][j]);
                g[t]=min(g[t],l[g[i]-1][j]);
            }
    repu(i,0,(1<<k)-1)
    {
        int x=f[i],y=g[(1<<k)-1-i];
        if (x+1>=y)
            ++ans[1];
        else
            if (r[x+1][0]+1>=y)
                ++ans[l[x+1][0]],--ans[r[x+1][0]+1];
    }
    repu(i,1,n)
        puts((ans[i]+=ans[i-1])?"Possible":"Impossible");
    return 0;
}