#include using namespace std; using ll = long long; int main() { int n,q; cin >> n >> q; vector a(n); for(int i = 0; i < n; i++)cin >> a[i]; int B = sqrt(n); vector> pref_s((n + B - 1) / B); vector> pref_t((n + B - 1) / B); auto add = [&](multiset &S, multiset &T, int x)->void { S.insert(x); auto it = S.find(x); if(it != S.begin()){ auto it2 = it; it2--; T.insert(*it ^ *it2); } auto it2 = it; it2++; if(it2 != S.end()){ T.insert(*it ^ *it2); } if(it != S.begin() && it2 != S.end()){ auto it3 = it; it3--; T.erase(T.find(*it3 ^ *it2)); } }; auto del = [&](multiset &S, multiset &T, int x)->void { auto it = S.find(x); if(it != S.begin()){ auto it2 = it; it2--; T.erase(T.find(*it ^ *it2)); } auto it2 = it; it2++; if(it2 != S.end()){ T.erase(T.find(*it ^ *it2)); } if(it != S.begin() && it2 != S.end()){ auto it3 = it; it3--; T.insert(*it2 ^ *it3); } S.erase(it); }; vector> v_s((n + B - 1) / B); for(int i = 0; i < n; i++){ for(int j = (n + B - 1) / B - 1; i < (j+1) * B; j--){ //if(i < (j+1) * B)add(pref_s[j], pref_t[j], a[i]); v_s[j].push_back(a[i]); } } for(int i = 0; i < (n + B - 1) / B; i++){ sort(v_s[i].begin(), v_s[i].end()); for(int j = 0; j < (int)v_s[i].size(); j++){ if(j != 0){ pref_t[i].insert(v_s[i][j] ^ v_s[i][j-1]); } pref_s[i].insert(v_s[i][j]); } } while(q--){ int type; cin >> type; if(type == 1){ int i; cin >> i; int x; cin >> x; --i; for(int j = (n + B - 1) / B - 1; i < (j+1) * B; j--){ del(pref_s[j], pref_t[j], a[i]); } a[i] = x; for(int j = (n + B - 1) / B - 1; i < (j+1) * B; j--){ add(pref_s[j], pref_t[j], a[i]); } } else { int ans = 1LL<<30; int r; cin >> r; --r; if(r / B != 0){ ans = *pref_t[r/B-1].begin(); for(int i = r / B * B; i <= r; i++){ auto it = pref_s[r/B-1].lower_bound(a[i]); if(it != pref_s[r/B-1].end()){ ans = min(ans, (*it) ^ (a[i])); } if(it == pref_s[r/B-1].begin())continue; it--; ans = min(ans , (*it) ^ (a[i])); } } vector v; for(int i = r / B * B; i <= r; i++){ v.push_back(a[i]); } sort(v.begin(), v.end()); for(int i = 0; i < (int)v.size() - 1; i++){ ans = min(ans , a[i] ^ a[i+1]); } cout << ans << endl; } } }