#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5;
int n, k;
int v[N], w[N];
int f[N];
bool vis[N][N];
vector<int> V;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k;
int K = 0;
for(int i = 1; i <= n; i++) cin>>v[i]>>w[i], K = max(K, v[i]);
int I = 1;
for(int i = 0; i <= n; i++) vis[i][0] = true;
for(int i = 1; i <= n; i++) {
f[v[i]] = max(f[v[i]], w[i]);
for(int j = w[i]; j > 0; j = (j - 1) & w[i]) {
if(!vis[v[i]][j]) {
vis[v[i]][j] = true;
}
}
for(int j = K; j >= 0; j--)
for(int t = w[i]; t > 0 ; t = (t - 1) & w[i])
if(vis[j][t]) {
f[j & v[i]] = max(f[j & v[i]], t);
if(!vis[j & v[i]][t]) {
vis[j & v[i]][t] = true;
}
}
}
int maxn = 0;
for(int i = 0; i <= k; i++) maxn = max(maxn, f[i]);
cout<<maxn;
return 0;
}