#include <bits/stdc++.h>
using namespace std;
void albus() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
bool asec(long long a, long long b) { return a < b; }
bool desc(long long a, long long b) { return a > b; }
bool Asec_and_desc(pair<long long, pair<long long, long long>> a,
                   pair<long long, pair<long long, long long>> b) {
  if (a.first == b.first) {
    if (a.second.first == b.second.first) {
      return a.second.second < b.second.second;
    }
    return a.second.first < b.second.first;
  }
  return a.first > b.first;
}
bool compare(pair<long long, long long> a, pair<long long, long long> b) {
  return a.second < b.second;
}
typedef struct data {
  data *bit[2];
  long long cnt = 0;
} trie;
trie *head;
void insert(long long x) {
  trie *node = head;
  for (long long i = 30; i >= 0; i--) {
    long long cur = (x >> i) & 1;
    if (node->bit[cur] == NULL) {
      node->bit[cur] = new trie();
    }
    node = node->bit[cur];
    node->cnt++;
  }
}
long long countXor(long long x, long long q) {
  trie *node = head;
  long long ans = 0, sum = 0;
  for (long long i = 30; i >= 0; i--) {
    long long cur = (x >> i) & 1;
    long long cur2 = (q >> i) & 1;
    if (cur2 == 0) {
      if (node->bit[!cur] != NULL) ans += node->bit[!cur]->cnt;
      if (node->bit[cur] != NULL) {
        node = node->bit[cur];
      } else
        return ans;
    } else if (cur2 == 1) {
      if (node->bit[!cur] != NULL)
        node = node->bit[!cur];
      else
        return ans;
    }
  }
  ans += node->cnt;
  return ans;
}
int32_t main() {
  albus();
  head = new trie();
  insert(0);
  long long n, q;
  cin >> n >> q;
  vector<long long> A;
  for (long long i = 1; i <= n; i++) {
    long long a;
    cin >> a;
    A.push_back(a);
  }
  long long xo = 0, final = 0;
  for (long long i = 0; i < A.size(); i++) {
    xo ^= A[i];
    final += countXor(xo, q);
    insert(xo);
  }
  cout << final << endl;
}
