#include using namespace std; #define endl '\n' typedef long long ll; typedef pair pii; const int N = 5e3+10; const int MOD = 1e9 + 7; ll t[4 * N]; void update(int v, int b , int e , int l , int r , ll val){ if(b > r || e < l)return; if(b >= l && e <= r){ t[v] = max(t[v] , val); return; } int m = (b + e) >> 1; update(2 * v , b , m , l , r , val); update(2 * v + 1 , m + 1 , e , l , r , val); } ll ans = 0; void query(int v , int b , int e , int l , int r ){ ans = max(ans , t[v]); if(b >= l && e <= r){ return; } int m = (b + e) >> 1; if(m >= r) return query(2 * v , b ,m , l , r); if(m < l)return query(2 * v + 1 , m + 1 , e , l , r); assert(false); } int n , k; int s[N]; int main() { ios::sync_with_stdio( 0 ); cin.tie( 0 ); cin >> n >> k; for( int i = 1; i <= n; i++ ){ cin >> s[i]; } for( int i = 1; i <= n; i++ ){ int maxi = 0; int mini = 1e9 + 100; int mand = s[i]; int mor = s[i]; for( int j = i; j <= n; j++ ){ maxi = max(maxi , s[j]); mini= min(mini , s[j]); mor = mor | s[j]; mand =mand & s[j]; ll cost = (mor - mand) - (maxi - mini); if(cost >= k) update(1 , 1, n , i , j , j - i + 1); } } for( int i = 1; i <= n; ++i ){ ans = 0; query(1 , 1 , n , i , i); cout << (ans > 0 ? ans : -1) << endl; } return 0; }