#include #include int sorter(int *a, int *b){ return *b - *a; } int and(int *t, int i, int k){ int sum = t[i]; int j; for(j = 1; (j < k) && sum; j++){ sum &= t[i + j]; } return sum; } 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; for(i = 0; i <= (n - k); i++){ int ander = and(t, i, k); if(ander > max){ max = ander; } } 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 = max; while(max){ num = 0; max /= 2; for(i = 0; i < szurtn; i++){ if(szurt[i] >= max){ szurt[i] -= max; num++; } } if(num >= k){ sum += max; } if(num == k){ break; } } 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 */