def main(): n, x = list(map(int, input().split())) A = list(map(int, input().split())) if not x: if len(set(A)) == n: return "Yes" else: return "No" for i in range(29, -1, -1): if x >> i & 1: break idx = i y = pow(2, i+1) D = {} for a in A: b = a // y if b in D: D[b].append(a) else: D[b] = [a] for d in D: X = [] Y = [] for a in D[d]: if a >> idx & 1: X.append(a) else: Y.append(a) X.sort() Y.sort() if 1 < abs(len(X)-len(Y)): return "No" if len(X) != len(Y): if len(X) < len(Y): X, Y = Y, X Z = [] for i in range(len(X)+len(Y)): if not i % 2: Z.append(X[i//2]) else: Z.append(Y[i//2]) for i in range(len(X)+len(Y)-1): if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x: pass else: return "No" else: Z = [] f0 = f1 = 1 for i in range(len(X)+len(Y)): if not i % 2: Z.append(X[i//2]) else: Z.append(Y[i//2]) for i in range(len(X)+len(Y)-1): if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x: pass else: f0 = 0 X, Y = Y, X Z = [] for i in range(len(X)+len(Y)): if not i % 2: Z.append(X[i//2]) else: Z.append(Y[i//2]) for i in range(len(X)+len(Y)-1): if Z[i]^x < Z[i+1] and Z[i] < Z[i+1]^x: pass else: f1 = 0 if not f0 and not f1: return "No" return "Yes" print(main())