#include #include using namespace std; const int days = 30; // returns first common power index int solve_subset(int start_ind, vector* in_inds, vector*& out_inds, vector& avails, int K) { for (int i = start_ind; i <= days; i++) { vector* avail_inds = new vector(); avail_inds->reserve(avails.size()); int check_pow = 1 << (days - i); for (int j = 0; j < in_inds->size(); j++) { if (avails[(*in_inds)[j]] & check_pow) { avail_inds->push_back((*in_inds)[j]); } } if (avail_inds->size() >= K) { out_inds = avail_inds; return i; } } return -1; } int main() { int N, K; while (cin >> N >> K) { vector avails(N); for (int i = 0; i < N; i++) { cin >> avails[i]; } int res = 0; int cur_ind = 1; vector* avail_inds = new vector(N); vector* scndry; for (int i = 0; i < N; i++) { (*avail_inds)[i] = i; } while (cur_ind >= 0) { int ret_ind = solve_subset(cur_ind, avail_inds, scndry, avails, K); if (ret_ind >= 0) { res += 1 << (days - ret_ind); cur_ind = ret_ind + 1; avail_inds->clear(); vector* tmp = avail_inds; avail_inds = scndry; scndry = avail_inds; } else { break; } } cout << res << "\n"; } return 0; }