#include <iostream>
#include <algorithm>

using namespace std;

long long a[111111], b[111111];


long long n, k, ans = 0;

bool issub(long long x, long long y) {
    for (long long i = 0; i < 30; i++) {
        if (((1 << i) & x) > 0) {
            if (((1 << i) & y) == 0)
                return false;
        }
    }
    return true;
}

long long check(long long k) {
    long long ret = 0;
    for (long long i = 0; i < n; i++)
        if (issub(a[i], k))
            ret += b[i];
    return ret;
}

int main() {
    cin >> n >> k;
    for (long long i = 0; i < n; i++) {
        cin >> a[i] >> b[i];
    }
    ans = check(k);
    for (long long i = 0; i <= 30; i++) {
        long long tmp = k;
        long long x = i;
        for (long long z = 0; z < 30; z++) {
            if (((1 << z) & tmp) > 0) {
                if (x > 0)
                    x--;
                else {
                    tmp -= (1 << z);
                    break;
                }
            } else {
                tmp += (1 << z);
            }
        }
        if (x == 0 and tmp <= k)
            ans = max(ans, check(tmp));
    }
    cout << ans << endl;
}