N, K = map(int, input().split()) K = (K - 1) * 2 + N A = list(map(int, input().split())) X = [0] * (1 << 17) for a in A: X[a >> 13] += 1 def FWT(X) -> None: N = len(X) n = N.bit_length() - 1 for i in range(n): d = 1 << i for j in range(N): if (j & d) == 0: x = X[j] y = X[j | d] X[j] = x + y X[j | d] = x - y def IFWT(X) -> None: N = len(X) n = N.bit_length() - 1 for i in range(n): d = 1 << i for j in range(N): if (j & d) == 0: x = X[j] y = X[j | d] X[j] = (x + y) >> 1 X[j | d] = (x - y) >> 1 def xor_conv(X, Y) -> list[int]: N = len(X) X = X[:] Y = Y[:] FWT(X) FWT(Y) for i in range(N): X[i] *= Y[i] IFWT(X) return X X = xor_conv(X, X) for upper in range(1 << 17): if X[upper] <= K: K -= X[upper] else: break B = [[] for _ in range(1 << 17)] LO = (1 << 13) - 1 for a in A: B[a >> 13].append(a & LO) S = [0] * (1 << 13) for i in range(1 << 17): j = upper ^ i if len(B[i]) == 0 or len(B[j]) == 0: continue if len(B[i]) * len(B[j]) <= 13 << 13: for a in B[i]: for b in B[j]: S[a ^ b] += 1 else: X = [0] * (1 << 13) for a in B[i]: X[a] += 1 Y = [0] * (1 << 13) for b in B[j]: Y[b] += 1 Z = xor_conv(X, Y) for k in range(1 << 13): S[k] += Z[k] for lower in range(1 << 13): if S[lower] <= K: K -= S[lower] else: break print(upper << 13 | lower)