#include<bits/stdc++.h>

using namespace std;

int K, N, V, sz[20], x[200009], maxPref[200009], pf[400009], sf[400009], lft[19][200009], rgt[19][200009];

int main ()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%d %d", &N, &V);
for (int i=1; i<=N; i++)
    scanf ("%d", &x[i]);
for (int i=0; (1 << i) <= V; i++)
    sz[i] = V >> i, K = i;
sz[++K] = 0;
for (int i=0; i<=K; i++)
{
    lft[i][1] = 1, lft[i][0] = 0;
    for (int j=2; j<=N; j++)
        if (x[j] - x[j - 1] <= sz[i]) lft[i][j] = lft[i][j - 1];
        else lft[i][j] = j;
    rgt[i][N] = N, rgt[i][N + 1] = N + 1;
    for (int j=N - 1; j>=1; j--)
        if (x[j + 1] - x[j] <= sz[i]) rgt[i][j] = rgt[i][j + 1];
        else rgt[i][j] = j;
}
int lim = 1 << K;
for (int i=0; i < lim; i++)
    sf[i] = N + 1;
for (int msk = 0; msk < lim; msk ++)
    for (int i=0; i<K; i++)
        if ((msk & (1 << i)) == 0)
            pf[msk | (1 << i)] = max (pf[msk | (1 << i)], (pf[msk] <= N ? rgt[i + 1][pf[msk] + 1] : N + 1)),
            sf[msk | (1 << i)] = min (sf[msk | (1 << i)], (sf[msk] >= 1 ? lft[i + 1][sf[msk] - 1] : 0));
for (int i=0; i<=N + 1; i++)
    maxPref[i] = -N;
for (int i=0; i<lim; i++)
    maxPref[sf[i]] = max (maxPref[sf[i]], pf[(lim - 1) ^ i]);
for (int i=1; i<=N + 1; i++)
    maxPref[i] = max (maxPref[i - 1], maxPref[i]);
for (int i=1; i<=N; i++)
    if (maxPref[rgt[0][i] + 1] >= lft[0][i] - 1) printf ("Possible\n");
    else printf ("Impossible\n");
return 0;
}
