#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define rep(i, a, b) for (int i=a;i<(b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector <vi> vvi;

auto MMM = numeric_limits<int>::max();

signed main() {
    cin.tie(0)->sync_with_stdio(0);

    int N, K;
    cin >> N >> K;
    vi C(N);

    for(int i = 0; i < N; i++)
        cin >> C[i];

    vi powers(32);
    for(int i =0; i < 32; i++)
        powers[i] = 1 << i;

    map<int, vi> look_f;
    set<int> pos, neg;

    for(auto power: powers) {
        look_f[power] = vi(N);
        if(K & power) pos.insert(power);
        else          neg.insert(power);
    }

    map<int, int> last_seen;
    for(auto power: powers)
        last_seen[power] = pos.contains(power) ? MMM : MMM;

    for(int idx = N-1; idx >= 0; idx--) {
        auto curr = C[idx];

        for(auto power: powers) {
            if(curr & power) last_seen[power] = idx;
            look_f[power][idx] = last_seen[power];
        }
    }

    int res = 0;
    for(int start = 0; start < N; start++) {
        auto min_end = start;
        for(auto p: pos) {
            min_end = max(min_end, look_f[p][start]);
        }

        auto max_end = N;
        for(auto n : neg) {
            max_end = min(max_end, look_f[n][start]);
        }



        if(min_end < max_end)
            res += max_end - min_end;
    }

    cout << res << endl;
}