import sys from sys import stdin class TrieNode: def __init__(self): self.left = None # Represents 0 self.right = None # Represents 1 self.count = 0 def query_trie(node, a, X, bit, state): if node is None: return 0 if bit < 0: return 1 if state == 'lt' else 0 bit_a = (a >> bit) & 1 bit_x = (X >> bit) & 1 if state == 'lt': return node.count elif state == 'eq': total = 0 for b_bit in [0, 1]: xor_bit = bit_a ^ b_bit if xor_bit < bit_x: next_state = 'lt' elif xor_bit == bit_x: next_state = 'eq' else: continue # No need to proceed for this b_bit if b_bit == 0: if node.left: total += query_trie(node.left, a, X, bit - 1, next_state) else: if node.right: total += query_trie(node.right, a, X, bit - 1, next_state) return total else: # state == 'gt' return 0 def insert_trie(node, a): current = node for bit in range(17, -1, -1): current_bit = (a >> bit) & 1 if current_bit == 0: if not current.left: current.left = TrieNode() current = current.left else: if not current.right: current.right = TrieNode() current = current.right current.count += 1 def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 X = int(input[idx]) idx += 1 A = list(map(int, input[idx:idx+N])) idx += N total = 0 root = TrieNode() for a in A: cnt = query_trie(root, a, X, 17, 'eq') total += cnt insert_trie(root, a) sum_result = 0 for k in range(18): B = [a for a in A if (a >> k) & 1 == 0] if len(B) < 2: continue sub_root = TrieNode() count_both_unset = 0 for a in B: cnt = query_trie(sub_root, a, X, 17, 'eq') count_both_unset += cnt insert_trie(sub_root, a) contribution = (total - count_both_unset) * (1 << k) sum_result += contribution print(sum_result) if __name__ == "__main__": main()