#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std ;

#define l first
#define r second

const int M = 40 ;
const int N = 1200010 ;
const int MAX = 1001000001 ;

int dep ;
int maxn ;
int ans[N] ;
int n, m, k ;
int base[N] ;
int L[M][N] ;
int R[M][N] ;
int farfrl[N] ;
int farfrr[N] ;
pair<int, int> rg[N] ;

void Init_dp(){
    for (int j = m ; j >= 0 ; j >>= 1){
        R[++ dep][n + 1] = n + 1 ;
        for (int i = 1 ; i <= n ; ++ i)
            L[dep][i] = (base[i] - base[i - 1] > j) ? i : L[dep][i - 1] ;
        for (int i = n ; i >= 1 ; -- i)
            R[dep][i] = (base[i + 1] - base[i] > j) ? i : R[dep][i + 1] ;
        if (!j) break ;
    }
    return ;
}
void Auxiliary_dp(){
    for (int i = 0 ; i <= maxn ; i += 2)
        for (int j = 1 ; j <= dep ; ++ j)
            if (1 << (j - 1) & i){
                farfrl[i] = max(farfrl[i], R[j][ farfrl[i ^ (1 << (j - 1))] + 1]) ;
                farfrr[i] = min(farfrr[i], L[j][ farfrr[i ^ (1 << (j - 1))] - 1]) ;
            }
    return ;
}
int main(){
    cin >> n >> m ;
    base[0] = -MAX ;
    base[n + 1] = MAX ; k = -1 ;
    for (int i = 1 ; i <= n ; ++ i)
        scanf("%d", &base[i]) ; Init_dp() ;
    for (int i = 1 ; i <= n ; ++ i)
        rg[i].l = L[1][i], rg[i].r = R[1][i] ;
    sort(rg + 1, rg + n + 1) ; maxn = (1 << dep) - 1 ;
    for (int i = 0 ; i <= maxn ; ++ i) farfrr[i] = n + 1 ;
    k += unique(rg + 1, rg + n + 1) - rg ; Auxiliary_dp() ;
    for (int i = 1 ; i <= k ; ++ i)
        for (int j = 0 ; j <= maxn ; j += 2)
            if (farfrl[j] + 1 >= rg[i].l && farfrr[(maxn ^ j) ^ 1] - 1 <= rg[i].r)
                { for (int o = rg[i].l ; o <= rg[i].r ; ++ o) ans[o] = 1 ; break ; }
    for (int i = 1 ; i <= n ; ++ i) puts(ans[i] ? "Possible" : "Impossible") ; return 0 ;
}
/*
0 8
0 8
1 7
0 8
1 7
0 8
2 6
0 8
*/
