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)