#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> door;
int n, m, x, ans;
string str;
inline int read() {
int data = 0;
char ch = getchar();
for (; '0' > ch || ch > '9'; ch = getchar());
for (; '0' <= ch && ch <= '9'; ch = getchar())
data = data * 10 + ch - '0';
return data;
}
int main() {
srand((int)(time(NULL)));
n = read();
m = read();
for (int i = 1; i <= n; i++) {
cin >> str ;
x = read();
if (str == "AND")
door.push_back({1, x});
else if (str == "OR")
door.push_back({2, x});
else if (str == "XOR")
door.push_back({3, x});
}
door.erase(remove(door.begin(), door.end(), pair<int, int> {2, 0}), door.end());
door.erase(remove(door.begin(), door.end(), pair<int, int> {3, 0}), door.end());
for (auto it = door.begin(); it + 1 != door.end(); it++)
if ((*it).first == (*(it + 1)).first) {
int t = (*it).second;
if ((*(it + 1)).first == 1)
(*(it + 1)).second &= t;
if ((*(it + 1)).first == 2)
(*(it + 1)).second |= t;
if ((*(it + 1)).first == 3)
(*(it + 1)).second ^= t;
door.erase(it);
it--;
}
door.erase(remove(door.begin(), door.end(), pair<int, int> {2, 0}), door.end());
door.erase(remove(door.begin(), door.end(), pair<int, int> {3, 0}), door.end());
for (auto it = door.begin(); it + 1 != door.end(); it++) {
int op = it->first;
int op2 = (it + 1)->first;
int t2 = it->second;
if ((op == 1 && op2 == 2) || (op == 2 && op2 == 1))
if (t2 == (it + 1)->second) {
(it + 1)->first = 4;
door.erase(it);
it--;
}
}
n = door.size() - 1;
int i, sum = 0;
for (i = n; i >= 0; i--)
if (door[i].first == 4) break;
sum = door[i].second;
if (i != -1) {
for (auto it = door.begin() + i + 1; it != door.end(); it++) {
int t = it->second, op = it->first;
if (op == 1) sum &= t;
if (op == 2) sum |= t;
if (op == 3) sum ^= t;
}
cout << sum;
}
for (int i = 0; i <= 101; i++) {
int tmp = rand() % (m + 1);
for (auto p : door) {
int op = p.first;
int t = p.second;
if (op == 1)
tmp &= t;
else if (op == 2)
tmp |= t;
else if (op == 3)
tmp ^= t;
else if (op == 4)
tmp = t;
}
ans = max(ans, tmp);
}
cout << ans;
return 0;
}