#include <bits/stdc++.h>
using namespace std;
int main() {
  int N, K;
  cin >> N >> K;
  using arr2 = array<int, 2>;
  vector<arr2> binTrie;
  const int w = 30;
  binTrie.push_back({-1, -1});
  vector<int> sz(1, 0);
  auto add = [&](int x) {
    int v = 0;
    for (int i = w - 1; i >= 0; --i) {
      int b = (x >> i) & 1;
      ++sz[v];
      if (binTrie[v][b] >= 0) {
        v = binTrie[v][b];
        continue;
      }
      int v_ = binTrie.size();
      binTrie[v][b] = v_;
      binTrie.push_back({-1, -1});
      sz.push_back(0);
      v = v_;
    }
    ++sz[v];
  };
  auto xor_lower_bound_size = [&](int x, int k) {
    int v = 0, ret = 0;
    for (int i = w - 1; i >= 0; --i) {
      int b = ((x ^ k) >> i) & 1;
      int t = (k >> i) & 1;
      if ((!t) and binTrie[v][b ^ 1] >= 0) ret += sz[binTrie[v][b ^ 1]];
      if (binTrie[v][b] < 0) {
        v = -1;
        break;
      }
      v = binTrie[v][b];
    }
    if (v >= 0) ret += sz[v];
    return ret;
  };
  vector<int> A(N + 1);
  for (int i = 0; i < N; ++i) {
    cin >> A[i + 1];
    A[i + 1] ^= A[i];
  }
  long long ans = 0;
  for (int i = 0; i <= N; ++i) {
    ans += xor_lower_bound_size(A[i], K);
    add(A[i]);
  }
  cout << ans << endl;
}
