#include #include #include #include using namespace std; string reverse(string s) { for (int i = 0; i < s.length()/2; ++i) { swap(s[i], s[s.length()-1-i]); } return s; } long long int toDec(string s) { long long int number = 0; long long int two = 1; for(int i = s.length() - 1; i >= 0; i--) { if(s[i] == '1') { number += two; } two *= 2; } return number; } string toBinary(long long int num) { string temp = ""; while(num > 0) { if(num % 2 == 0) { temp += "0"; } else { temp += "1"; } num /= 2; } temp = reverse(temp); string temp2 = ""; for(int i = temp.length(); i <= 30; i++) { temp2 += "0"; } temp2 += temp; return temp2; } int main() { string wynik = ""; int zesp, target; long long int in; cin >> zesp >> target; vector flag; list lista; for(int i = 0; i < zesp; i++) { cin >> in; lista.push_back(toBinary(in)); flag.push_back(1); } int len = toBinary(in).length(); for(int i = 0; i < len; i++) { int loop = 0; int counter = 0; for(auto it = lista.begin(); it != lista.end(); ++it) { string s = *it; if(flag[loop] == 1) { if(s[i] == '1') { counter++; } } loop++; } if(counter >= target) { wynik += "1"; loop = 0; for(auto it = lista.begin(); it != lista.end(); ++it) { string s = *it; if(flag[loop] == 1) { if(s[i] == '0') { flag[loop] = 0; } } loop++; } } else { wynik += "0"; } } cout << toDec(wynik) << endl; return 0; }