#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair pii; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define R1(a) do{scanf("%d", &(a));}while(0) #define R2(a, b) do{scanf("%d%d", &(a), &(b));}while(0) #define R3(a, b, c) do{scanf("%d%d%d", &(a), &(b), &(c));}while(0) #define SV(vec) do{int s_v_;scanf("%d", &(s_v_));vec.PB(s_v_);}while(0) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; #define INF 1000000007 #define MAXB int n, k, a[200014], maxb, ccand, cand[200014], res, cr; int is_cand (int x, int bshift) { return x & (1 << bshift); } int main () { R2(n, k); FOR(i, 0, n) { R1(a[i]); cand[i] = 1; } FORDE(bshift, 29, 0) { ccand = 0; FOR(i, 0, n) if (cand[i] && is_cand(a[i], bshift)) ++ccand; if (ccand >= k) { FOR(i, 0, n) if (!is_cand(a[i], bshift)) cand[i] = 0; } } res = -1; cr = 0; FOR(i, 0, n) { if (cand[i]) { res = (res < 0 ? a[i] : (res & a[i])); if (++cr == k) break; } } printf("%d\n", res); return 0; }