#include using namespace std; #define _ int v, int tl, int tr, int l, int r, int x #define I1 if(tl > r || tr < l) #define I2 if(tl >= l && tr <= r) #define tm (tl + tr >> 1) #define sol v+v,tl,tm,l,r,x #define sag v+v+1,tm+1,tr,l,r,x #define mp make_pair #define pb push_back #define st first #define nd second typedef long long ll; typedef pair < int , int > pp; const int mod = 1e9 + 7; const int N = 1e5 + 5; int s[N<<2],Mn[N],Mx[N],A[N],L1[33],L2[33],n,k,i,j,orr,ann,l,m,r,x,mx,cost; void up(_) { I1 return; I2{ s[v] = max(s[v] , x); return; } up(sol); up(sag); } int qry(_) { I1 return 0; I2 return s[v]; return max(s[v] , max(qry(sol) , qry(sag))); } int qrymn(int x){ int t=mod; for(; x ; x -= x&-x) t = min(t , Mn[x]); return t; } int qrymx(int x){ int t=0; for(; x ; x -= x&-x) t = max(t , Mx[x]); return t; } int main(){ cin >> n >> k; memset(Mn, 127, sizeof Mn); for(i=1;i<=n;i++){ cin >> A[i]; for(x=n-i+1; x<=n ; x += x&-x){ Mx[x] = max(Mx[x] , A[i]); Mn[x] = min(Mn[x] , A[i]); } l = r = -1; orr = ann = A[i]; for(j=i; j ;j = mx){ mx = 0; orr |= A[j]; ann &= A[j]; for(int z=0;z<30;z++){ if(!(orr & (1 << z))) mx = max(mx , L1[z]); if(ann & (1 << z)) mx = max(mx , L2[z]); } // cout << i << " " << mx << " " << j << " aa\n"; if(orr - ann - qrymx(n-j+1) + qrymn(n-j+1) >= k) { l = mx+1; r = j; cost = orr-ann; } } // cout << l << " " << r << " ww\n"; if(l != -1){ for(;l < r;){ m = l+r >> 1; if(cost - qrymx(n-m+1) + qrymn(n-m+1) < k) l = m+1; else r = m; } up(1,1,n,r,i,i-r+1); // cout << r << " " << i << " ss\n"; } x = A[i]; for(j=0;j<30;j++){ if(x & (1 << j)) L1[j] = i; else L2[j] = i; } } for(i=1;i<=n;i++){ x = qry(1,1,n,i,i,0); if(x) cout << x << "\n"; else cout << "-1\n"; } return 0; }