Buggy python submission (verdict: Time Limit Exceeded):
N, K = map(int, input().split())
A = list(map(int, input().split()))

Rewards_0, Rewards_1 = [], []  # i桁目を0 or 1にしたときの報酬
for i in range(40):
    reward_0, reward_1 = 0, 0
    for a in A:
        if a & (2 ** i):
            reward_0 += 2 ** i
        elif 2 ** i <= K:
            reward_1 += 2 ** i
    Rewards_0.append(reward_0)
    Rewards_1.append(reward_1)

dp0 = [0] * 41  # K以下か未確定
dp1 = [0] * 41  # K以下であることが確定

for i in reversed(range(40)):
    if K & (2 ** i):
        dp0[i] = dp0[i + 1] + Rewards_1[i]
        dp1[i] = dp0[i + 1] + Rewards_0[i]
    else:
        dp0[i] = dp0[i + 1] + Rewards_0[i]

    if dp1[i + 1] != 0:
        dp1[i] = max(dp1[i], dp1[i + 1] + max(Rewards_0[i], Rewards_1[i]))

print(max(dp0[0], dp1[0]))


Fixed submission:
N, K = map(int, input().split())
A = list(map(int, input().split()))


# 上からi桁(0-indexed)のbitが立っているものがいくつあるか
bit_stand_counts = [0] * 40
for a in A:
    a = bin(a)[2:].zfill(40)
    for i in range(40):
        if a[i] == '1':
            bit_stand_counts[i] += 1


# 上からi番目のbitまでみたときに、dp[i][0]: K以下であることが未確定 dp[i][1]: K以下であることが確定 のときの最大値
dp = [[-1, -1] for i in range(41)]
dp[0][0] = 0


# Kをbitで表したもの
K_bit = bin(K)[2:].zfill(40)


for i in range(40):
    value_0 = (2 ** (39 - i)) * bit_stand_counts[i]  # i桁目を0にした時の報酬
    value_1 = (2 ** (39 - i)) * (N - bit_stand_counts[i])  # i桁目を1にした時の報酬
    
    if K_bit[i] == '0':  # Kの上からiビット目が0なら、K以下か未確定のほうは合わせるしかない
        dp[i + 1][0] = dp[i][0] + value_0
    else:
        dp[i + 1][0] = dp[i][0] + value_1
        dp[i + 1][1] = max(dp[i + 1][1], dp[i][0] + value_0)  # Kの上からiビット目が1ならK以下確定に飛べる

    if dp[i][1] != -1:  # K以下であることが確定しているなら、あとは貪欲にとれる
        dp[i + 1][1] = max(dp[i + 1][1], dp[i][1] + max(value_0, value_1))


print(max(dp[-1]))

Buggy python submission (verdict: Time Limit Exceeded):
from math import log2, ceil
N, K = map(int, input().split())
A = list(map(int, input().split()))

M = max(A)
M = max(M, K)

L = int(ceil(log2(M)))
p2 = [0] * L
for a in A:
    for i in range(L):
        if a & (1 << i):
            p2[i] += 1


ans = 0
for bs in range(K + 1):
    tmp = 0
    for i, cnt in enumerate(p2):
        if bs ^ (1 << i):
            tmp += (1 << i) * cnt
        else:
            tmp += (1 << i) * (N - cnt)
    ans = max(ans, tmp)

print(ans)


Fixed submission:
N, K = map(int, input().split())
A = list(map(int, input().split()))


# 上からi桁(0-indexed)のbitが立っているものがいくつあるか
bit_stand_counts = [0] * 40
for a in A:
    a = bin(a)[2:].zfill(40)
    for i in range(40):
        if a[i] == '1':
            bit_stand_counts[i] += 1


# 上からi番目のbitまでみたときに、dp[i][0]: K以下であることが未確定 dp[i][1]: K以下であることが確定 のときの最大値
dp = [[-1, -1] for i in range(41)]
dp[0][0] = 0


# Kをbitで表したもの
K_bit = bin(K)[2:].zfill(40)


for i in range(40):
    value_0 = (2 ** (39 - i)) * bit_stand_counts[i]  # i桁目を0にした時の報酬
    value_1 = (2 ** (39 - i)) * (N - bit_stand_counts[i])  # i桁目を1にした時の報酬
    
    if K_bit[i] == '0':  # Kの上からiビット目が0なら、K以下か未確定のほうは合わせるしかない
        dp[i + 1][0] = dp[i][0] + value_0
    else:
        dp[i + 1][0] = dp[i][0] + value_1
        dp[i + 1][1] = max(dp[i + 1][1], dp[i][0] + value_0)  # Kの上からiビット目が1ならK以下確定に飛べる

    if dp[i][1] != -1:  # K以下であることが確定しているなら、あとは貪欲にとれる
        dp[i + 1][1] = max(dp[i + 1][1], dp[i][1] + max(value_0, value_1))


print(max(dp[-1]))