#include #include int sorter(int *a, int *b){ return *b - *a; } int get(int n){ int max = 1; while(n >= max){ max *= 2; } return max / 2; } int main() { int n, k; scanf("%d %d", &n, &k); int t[n]; int i; for(i = 0; i < n; i++){ scanf("%d", t + i); } qsort(t, n, sizeof(int), sorter); int max = 0; max = get(t[k - 1]); int szurt[n]; int szurtn = 0; for(i = 0; i < n && t[i] > max; i++){ szurt[szurtn++] = (t[i] & ((max * 2) - 1));// - max; } int num = 0; int sum = 0; while(max){ num = 0; for(i = 0; i < szurtn; i++){ if(szurt[i] >= max){ szurt[i] -= max; num++; } } if(num >= k){ sum += max; } if(num == k){ break; } max /= 2; } printf("%d\n", sum); return 0; } /* 5 2 6 15 9 666 1 8 4 13 30 27 20 11 30 19 10 2 2 512 256 */