#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MX = 3e6 + 5;
const int N = 1e5 + 5;
struct Node {
int nxt[2];
int cnt = 0;
Node() {
memset(nxt, 0, sizeof nxt);
}
};
int sz;
Node trie[MX];
void addNumber(int x) {
int v = 0;
for (int i = 29; i >= 0; i--) {
int c = (x >> i) & 1;
if (trie[v].nxt[c] == 0) {
trie[v].nxt[c] = ++sz;
}
v = trie[v].nxt[c];
trie[v].cnt++;
}
}
// Tìm số lớn thứ k khi mỗi số x đều xor với sum_xor
int findKth(int k, int sum_xor) {
int v = 0, ans = 0;
for (int i = 29; i >= 0; i--) {
int c_sum = (sum_xor >> i) & 1;
int nxt_v0 = trie[v].nxt[c_sum], nxt_v1 = trie[v].nxt[c_sum ^ 1];
if (k <= trie[nxt_v1].cnt) {
ans |= (1 << i);
v = nxt_v1;
}
else {
k -= trie[nxt_v1].cnt;
v = nxt_v0;
}
}
return ans;
}
int n, q;
int a[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) addNumber(a[i]);
int sum_xor = 0;
while (q--) {
string type; cin >> type;
if (type == "XOR") {
int x; cin >> x;
sum_xor ^= x;
}
else {
int k; cin >> k;
cout << findKth(k, sum_xor) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE1YID0gM2U2ICsgNTsgCmNvbnN0IGludCBOID0gMWU1ICsgNTsgCgpzdHJ1Y3QgTm9kZSB7CglpbnQgbnh0WzJdOyAKCWludCBjbnQgPSAwOyAgCgoJTm9kZSgpIHsKCQltZW1zZXQobnh0LCAwLCBzaXplb2Ygbnh0KTsgCgl9Cn07IAoKaW50IHN6OyAKTm9kZSB0cmllW01YXTsgCgp2b2lkIGFkZE51bWJlcihpbnQgeCkgewoJaW50IHYgPSAwOyAgCglmb3IgKGludCBpID0gMjk7IGkgPj0gMDsgaS0tKSB7CgkJaW50IGMgPSAoeCA+PiBpKSAmIDE7IAoJCWlmICh0cmllW3ZdLm54dFtjXSA9PSAwKSB7CgkJCXRyaWVbdl0ubnh0W2NdID0gKytzejsgIAoJCX0KCQl2ID0gdHJpZVt2XS5ueHRbY107IAoJCXRyaWVbdl0uY250Kys7IAoJfQp9CgovLyBUw6xtIHPhu5EgbOG7m24gdGjhu6kgayBraGkgbeG7l2kgc+G7kSB4IMSR4buBdSB4b3IgduG7m2kgc3VtX3hvcgppbnQgZmluZEt0aChpbnQgaywgaW50IHN1bV94b3IpIHsKCWludCB2ID0gMCwgYW5zID0gMDsgIAoJZm9yIChpbnQgaSA9IDI5OyBpID49IDA7IGktLSkgewoJCWludCBjX3N1bSA9IChzdW1feG9yID4+IGkpICYgMTsgCgkJaW50IG54dF92MCA9IHRyaWVbdl0ubnh0W2Nfc3VtXSwgbnh0X3YxID0gdHJpZVt2XS5ueHRbY19zdW0gXiAxXTsgCgkJCgkJaWYgKGsgPD0gdHJpZVtueHRfdjFdLmNudCkgewoJCQlhbnMgfD0gKDEgPDwgaSk7IAoJCQl2ID0gbnh0X3YxOyAgCgkJfQoJCWVsc2UgewoJCQlrIC09IHRyaWVbbnh0X3YxXS5jbnQ7IAoJCQl2ID0gbnh0X3YwOyAKCQl9Cgl9CgoJcmV0dXJuIGFuczsgCn0KCmludCBuLCBxOyAKaW50IGFbTl07IAoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gcTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGFkZE51bWJlcihhW2ldKTsgCgoJaW50IHN1bV94b3IgPSAwOyAgCgoJd2hpbGUgKHEtLSkgewoJCXN0cmluZyB0eXBlOyBjaW4gPj4gdHlwZTsgCgoJCWlmICh0eXBlID09ICJYT1IiKSB7CgkJCWludCB4OyBjaW4gPj4geDsgCgkJCXN1bV94b3IgXj0geDsgCgkJfQoJCWVsc2UgewoJCQlpbnQgazsgY2luID4+IGs7CgkJCWNvdXQgPDwgZmluZEt0aChrLCBzdW1feG9yKSA8PCAnXG4nOyAKCQl9Cgl9Cn0=