#include using namespace std; typedef long long ll; typedef vector vl; typedef vector vvl; typedef pair pll; typedef vector vb; const ll oo = 0x3f3f3f3f3f3f3f3f; const double eps = 1e-9; #define sz(c) ll((c).size()) #define all(c) begin(c), end(c) #define FOR(i,a,b) for (ll i = (a); i < (b); i++) #define FORD(i,a,b) for (ll i = (b)-1; i >= (a); i--) #define mp make_pair #define mt make_tuple #define pb push_back #define eb emplace_back #define xx first #define yy second #define has(c,i) ((c).find(i) != end(c)) #define DBGDO(X) ({ if(1) cerr << "DBGDO: " << (#X) << " = " << (X) << endl; }) typedef function binop; struct bit { ll n; ll ZERO; binop op; vl a; bit(ll n, ll ZERO, binop op): n(n), ZERO(ZERO), op(op), a(n+2,ZERO) { } void add(ll i, ll v) { for (++i; i <= n+1; i += i & -i) a[i] = op(a[i],v); } ll get(ll i) { ll res = ZERO; for (++i; i; i -= i & -i) res = op(res,a[i]); return res; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll n, k; cin >> n >> k; vl a(n); FOR(i,0,n) cin >> a[i]; bit b_or (n, 0, bit_or ()); bit b_and(n, ~0, bit_and()); bit b_max(n, -oo, [&](const ll &x, const ll &y) { return max(x,y); }); bit b_min(n, oo, [&](const ll &x, const ll &y) { return min(x,y); }); vector os, as; auto normalize = [&](vector &vs) { vector nvs; FOR(i,0,sz(vs)) { if (i+1 < sz(vs) && vs[i].yy == vs[i+1].yy) continue; nvs.pb(vs[i]); } vs = nvs; }; vl ress(n,-1); FORD(i,0,n) { b_max.add(i,a[i]); b_min.add(i,a[i]); os.eb(i,a[i]); for (auto &p: os) p.yy |= a[i]; normalize(os); as.eb(i,a[i]); for (auto &p: as) p.yy &= a[i]; normalize(as); vector ev = {{n,0}}; for (auto p: os) ev.pb(p); for (auto p: as) ev.pb(p); sort(all(ev)); ll cur = i-1; ll co = a[i], ca = a[i]; auto score = [&](ll j) { return (co - ca) - (b_max.get(j) - b_min.get(j)); }; FOR(j,0,sz(ev)-1) { co |= ev[j].yy; ca &= ev[j].yy; ll l = ev[j].xx, r = ev[j+1].xx; if (l == r) continue; if (score(l) < k) continue; while (r-l > 1) { ll m = (l+r)/2; if (score(m) >= k) l = m; else r = m; } cur = max(cur,l); } if (cur >= i) ress[i] = cur; } vl res(n,-1); vector> ev; FOR(i,0,n) if (ress[i] != -1) { ll len = ress[i]-i+1; ev.eb(i,len,true); ev.eb(ress[i]+1,len,false); } sort(all(ev)); map cnt; ll j = 0; FOR(i,0,n) { while (j < sz(ev) && get<0>(ev[j]) == i) { ll len = get<1>(ev[j]); if (get<2>(ev[j])) cnt[len]++; else cnt[len]--; if (cnt[len] == 0) cnt.erase(len); j++; } if (sz(cnt)) res[i] = max(res[i],cnt.rbegin()->xx); } FOR(i,0,n) cout << res[i] << "\n"; }