#include #include #include using namespace std; int main(){ int n, k; cin >> n >> k; vector v(n); vector > can(n, vector(31)); int j = 0; for(int& x : v){ cin >> x; for(int i = 30; i >= 0; i--){ if(x >= (1 << i)){ x -= (1 << i); can[j][i] = 1; } } j++; } vector vec; long long res = 0; bool ok = 1; for(int i = 30; i >= 0; i--){ int cnt = 0; if(vec.empty() && ok){ for(int j = 0; j < n; j++){ cnt += can[j][i]; } if(cnt >= k){ for(int j = 0; j < n; j++){ if(can[j][i]) vec.emplace_back(j); } res += (1 << i); ok = 0; } } else{ vector novi; for(int j : vec){ if(can[j][i]){ novi.push_back(j); } } if(novi.size() >= k){ res += (1 << i); vec = novi; } } } cout << res << endl; }