思路:经典博弈论结论题,尼姆博弈问题。简单说来,假设有堆石子,每堆石子有个,如果每堆石子数的异或和为0,则先手必输;否则先手必胜。因此,我们先把所有异或起来,判断不用-k操作时的初始状态,能否获胜。如果说能获胜就直接返回"YES",否则我们就要使用-k操作了

使用-k操作时,就直接遍历一遍,当时才能进行操作。具体操作时,就利用异或的性质,即,先把当前元素x从异或和中异或去掉,然后再异或,判断能否获胜。如果可以的话,直接输出"YES";最终都不行的话,输出"NO"

代码:

import sys
from functools import reduce
from operator import xor

input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def GMI():
    return map(lambda x: int(x) - 1, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def solve():
    n, k = MII()
    a = LII()

    res = reduce(xor, a)
    if res != 0:
        print("YES")
        return

    for x in a:
        if x >= k:
            res ^= x
            res ^= (x - k)
            if res != 0:
                print("YES")
                return
    print("NO")


t = 1
# t = II()
for _ in range(t):
    solve()