#include <bits/stdc++.h>
using namespace std;
// ------------------------------------------------------------
// Bài toán: Đếm cặp (i, j) sao cho (a_i | a_j) <= x
// Ý tưởng:
// - Giữ lại chỉ các bit mà x bật (gọi là k bit).
// - Nén mỗi a_i thành mask k-bit (chỉ gồm các bit có trong x).
// - SOS DP đếm số a_i là submask của mỗi mask.
// ------------------------------------------------------------
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; long long x;
cin >> n >> x;
// Bước 1. Lưu vị trí các bit bật của x
vector<int> bits;
for (int b = 0; b < 30; ++b)
if (x >> b & 1)
bits.push_back(b);
int k = bits.size(); // số bit bật của x
int full_mask = (1 << k); // chỉ cần duyệt các submask của x
vector<int> freq(full_mask, 0);
// Bước 2. Nén mỗi a_i thành mask con của x
for (int i = 0; i < n; ++i) {
long long a; cin >> a;
int mask = 0;
for (int j = 0; j < k; ++j)
if (a >> bits[j] & 1)
mask |= (1 << j);
if ((a | x) == x) // chỉ giữ các số không có bit ngoài x
freq[mask]++;
}
// Bước 3. SOS DP: cnt[m] = số lượng a_i là submask của m
vector<long long> cnt(freq.begin(), freq.end());
for (int b = 0; b < k; ++b)
for (int mask = 0; mask < full_mask; ++mask)
if (mask >> b & 1)
cnt[mask] += cnt[mask ^ (1 << b)];
// Bước 4. Đếm số cặp có OR <= x (tức OR là submask của x)
long long ans = 0;
for (int mask = 0; mask < full_mask; ++mask) {
long long c = cnt[mask];
ans += c * (c - 1) / 2;
}
cout << ans << "\n";
}