## https://yukicoder.me/problems/no/2977 def solve2(N, K, A): array = [] for i in range(N): for j in range(i + 1, N): array.append(A[i] ^ A[j]) array.sort() print(array[K - 1]) def main(): N, K = map(int, input().split()) A = list(map(int, input().split())) max_a = max(A) for k in reversed(range(40)): if (1 << k) & max_a > 0: max_k = k break A.sort() answer = 0 target_ranges = [[i + 1, N - 1] for i in range(N)] target_ranges[N - 1] = [-1, -1] for k in reversed(range(max_k + 1)): array = [-1] * N for i in range(N): array[i] = 1 if (1 << k) & A[i] > 0 else 0 # 0の数を計算 z = 0 for i in range(N): if target_ranges[i][0] == -1: continue if array[i] == 0: if array[target_ranges[i][1]] == 0: z += target_ranges[i][1] - target_ranges[i][0] + 1 elif array[target_ranges[i][0]] == 0: low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 0: low = mid else: high = mid if array[high] == 0: z += high - target_ranges[i][0] + 1 else: z += low - target_ranges[i][0] + 1 else: if array[target_ranges[i][0]] == 1: z += target_ranges[i][1] - target_ranges[i][0] + 1 elif array[target_ranges[i][1]] == 1: low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 1: high = mid else: low = mid if array[low] == 1: z += target_ranges[i][1] - low + 1 else: z += target_ranges[i][1] - high + 1 if z < K: K -= z answer += (1 << k) for i in range(N): if target_ranges[i][0] == -1: continue if array[i] == 0: if array[target_ranges[i][1]] == 0: target_ranges[i][0] = -1 target_ranges[i][1] = -1 continue else: # 1を求める low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 1: high = mid else: low = mid if array[low] == 1: target_ranges[i][0] = low else: target_ranges[i][0] = high else: if array[target_ranges[i][0]] == 1: target_ranges[i][0] = -1 target_ranges[i][1] = -1 continue else: # 0を求める low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 0: low = mid else: high = mid if array[high] == 0: target_ranges[i][1] = high else: target_ranges[i][1] = low else: # 0となる範囲を求める for i in range(N): if target_ranges[i][0] == -1: continue if array[i] == 0: if array[target_ranges[i][0]] == 1: target_ranges[i][0] = -1 target_ranges[i][1] = -1 continue else: low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 0: low = mid else: high = mid if array[high] == 0: target_ranges[i][1] = high else: target_ranges[i][1] = low else: if array[target_ranges[i][1]] == 0: target_ranges[i][0] = -1 target_ranges[i][1] = -1 continue else: low = target_ranges[i][0] high = target_ranges[i][1] while high - low > 1: mid = (high + low) // 2 if array[mid] == 1: high = mid else: low = mid if array[low] == 1: target_ranges[i][0] = low else: target_ranges[i][0] = high print(answer) if __name__ == "__main__": main()