#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int32_t main() {
  long long n, m;
  cin >> n >> m;
  vector<int> a(n);
  for (int i = 0; i < n; i++) cin >> a[i];
  long long ans = 0;
  for (int bitm = 0; bitm <= 1; bitm++) {
    vector<long long> b(n);
    if (bitm == 0)
      b[n - 1] = a[n - 1];
    else
      b[n - 1] = (~a[n - 1]) & ((1 << (m)) - 1);
    map<long long, long long> mp;
    ++mp[b[n - 1]];
    ++mp[0];
    long long XOR = 0;
    long long otv = n * (n + 1) / 2 - (b[n - 1] == 0);
    for (int j = n - 2; j >= 0; j--) {
      long long a1 = a[j];
      long long a2 = (~a[j]) & ((1 << m) - 1);
      if (mp[(XOR ^ a1)] < mp[(XOR ^ a2)]) {
        XOR ^= a1;
        b[j] = a1;
        otv -= mp[XOR];
        ++mp[XOR];
      } else {
        XOR ^= a2;
        b[j] = a2;
        otv -= mp[XOR];
        ++mp[XOR];
      }
    }
    ans = max(ans, otv);
  }
  cout << ans;
}
