#include<iostream>
#include<bits/stdc++.h>
using namespace std;
pair<string, int> a[100005];
int n;
int cal(int bit, int now){
for(int i = 0; i < n; i ++ ){
int x = a[i].second >> bit & 1;//判断这一位应该进行数
if(a[i].first == "OR") now |= x;
else if(a[i].first == "XOR") now ^= x;
else now &= x;
}
return now;
}
int main()
{
int m;
cin>>n>>m;
for(int i = 0; i < n; i ++ ){
cin>>a[i].first>>a[i].second;
}
int ans = 0, sum = 0;//sum表示初始攻击力是多少, ans表示最终的伤害值是多少
for(int i = 29; i >= 0 ; i -- ){//10^9最多会用到二进制的29位数
int r = cal(i, 0);//计算这一位填0的结果
int r1 = cal(i, 1);//计算这一位填1的结果
if(sum + (1 << i) <= m && r1 > r) {//如果这一位填1结果不会大于m,且能造成的伤害大于填0
sum += (1 << i);//初始攻击力这一位+1
ans += r1 << i;//伤害值加上这一位填1
}
else ans += r << i;//伤害值加上这一位填0
}
cout<<ans<<endl;
return 0;
}
10-31
166
11-01
251