#include<bits/stdc++.h>
#define str string
#define ll long long
#define db double
using namespace std;
const int mod=1e9+7;
int cnt[32][1200004], a[300001], lazy[32][1200004];
void push(int id, int l, int r, int val){
if(lazy[val][id]){
if(lazy[val][id]>0){
cnt[val][id*2]=(r-l+2)/2;
cnt[val][id*2+1]=(r-l+1)/2;
}else{
cnt[val][id*2]=0;
cnt[val][id*2+1]=0;
}
lazy[val][id*2]=lazy[val][id];
lazy[val][id*2+1]=lazy[val][id];
lazy[val][id]=0;
}
}
void build(int id, int l, int r, int val){
if(l==r){
if(a[l]==val)cnt[val][id]=1;
else cnt[val][id]=0;
return;
}
int m=(l+r-1)/2;
build(id*2, l, m, val);
build(id*2+1, m+1, r, val);
cnt[val][id]=cnt[val][id*2]+cnt[val][id*2+1];
}
int get(int id, int l, int r, int u, int v, int val){
if(u<=l && r<=v)return cnt[val][id];
int m=(l+r-1)/2, left=0, right=0;
push(id, l, r, val);
if(!(u>m || v<l))left=get(id*2, l, m, u, v, val);
if(!(u>r || v<m+1))right=get(id*2+1, m+1, r, u, v, val);
return left+right;
}
void update(int id, int l, int r, int u, int v, int val, int type){
if(u<=l && r<=v){
if(type){
cnt[val][id]=r-l+1;
lazy[val][id]=1;
}else{
cnt[val][id]=0;
lazy[val][id]=-1;
}
return;
}
int m=(l+r-1)/2;
push(id, l, r, val);
if(!(u>m || v<l))update(id*2, l, m, u, v, val, type);
if(!(u>r || v<m+1))update(id*2+1, m+1, r, u, v, val, type);
cnt[val][id]=cnt[val][id*2]+cnt[val][id*2+1];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
freopen("mexquery.inp", "r", stdin);
freopen("mexquery.out", "w", stdout);
int n; cin>>n;
for(int i=0; i<n; ++i)cin>>a[i];
for(int i=0; i<=30; ++i)build(1, 0, n-1, i);
int q; cin>>q;
while(q--){
int tmp;
cin>>tmp;
if(tmp==2){
int l, r; cin>>l>>r;
l--; r--;
for(int i=0; i<=31; ++i){
if(!get(1, 0, n-1, l, r, i)){
cout<<i<<'\n';
break;
}
}
}else{
int u, v, type; cin>>u>>v>>type;
u--; v--;
vector<int> curr_cnt(31, 0);
for(int i=0; i<=30; ++i){
curr_cnt[i]=get(1, 0, n-1, u, v, i);
update(1, 0, n-1, u, v, i, 0);
}
v=u;
if(type==1){
for(int i=0; i<=30; ++i){
v+=curr_cnt[i];
if(curr_cnt[i])update(1, 0, n-1, u, v-1, i, 1);
u+=curr_cnt[i];
}
}else{
for(int i=30; i>=0; --i){
v+=curr_cnt[i];
if(curr_cnt[i])update(1, 0, n-1, u, v-1, i, 1);
u+=curr_cnt[i];
}
}
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBzdHIgc3RyaW5nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZGIgZG91YmxlCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbW9kPTFlOSs3OwoKaW50IGNudFszMl1bMTIwMDAwNF0sIGFbMzAwMDAxXSwgbGF6eVszMl1bMTIwMDAwNF07Cgp2b2lkIHB1c2goaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB2YWwpewoJaWYobGF6eVt2YWxdW2lkXSl7CgkJaWYobGF6eVt2YWxdW2lkXT4wKXsKCQkJY250W3ZhbF1baWQqMl09KHItbCsyKS8yOwoJCQljbnRbdmFsXVtpZCoyKzFdPShyLWwrMSkvMjsKCQl9ZWxzZXsKCQkJY250W3ZhbF1baWQqMl09MDsKCQkJY250W3ZhbF1baWQqMisxXT0wOwoJCX0KCQlsYXp5W3ZhbF1baWQqMl09bGF6eVt2YWxdW2lkXTsKCQlsYXp5W3ZhbF1baWQqMisxXT1sYXp5W3ZhbF1baWRdOwoJCWxhenlbdmFsXVtpZF09MDsKCX0KfQoKdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHZhbCl7CglpZihsPT1yKXsKCQlpZihhW2xdPT12YWwpY250W3ZhbF1baWRdPTE7CgkJZWxzZSBjbnRbdmFsXVtpZF09MDsKCQlyZXR1cm47Cgl9CglpbnQgbT0obCtyLTEpLzI7CglidWlsZChpZCoyLCBsLCBtLCB2YWwpOwoJYnVpbGQoaWQqMisxLCBtKzEsIHIsIHZhbCk7CgljbnRbdmFsXVtpZF09Y250W3ZhbF1baWQqMl0rY250W3ZhbF1baWQqMisxXTsKfQoKaW50IGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBpbnQgdmFsKXsKCWlmKHU8PWwgJiYgcjw9dilyZXR1cm4gY250W3ZhbF1baWRdOwoJaW50IG09KGwrci0xKS8yLCBsZWZ0PTAsIHJpZ2h0PTA7CglwdXNoKGlkLCBsLCByLCB2YWwpOwoJaWYoISh1Pm0gfHwgdjxsKSlsZWZ0PWdldChpZCoyLCBsLCBtLCB1LCB2LCB2YWwpOwoJaWYoISh1PnIgfHwgdjxtKzEpKXJpZ2h0PWdldChpZCoyKzEsIG0rMSwgciwgdSwgdiwgdmFsKTsKCXJldHVybiBsZWZ0K3JpZ2h0Owp9Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBpbnQgdmFsLCBpbnQgdHlwZSl7CglpZih1PD1sICYmIHI8PXYpewoJCWlmKHR5cGUpewoJCQljbnRbdmFsXVtpZF09ci1sKzE7CgkJCWxhenlbdmFsXVtpZF09MTsKCQl9ZWxzZXsKCQkJY250W3ZhbF1baWRdPTA7CgkJCWxhenlbdmFsXVtpZF09LTE7CgkJfQoJCXJldHVybjsKCX0KCWludCBtPShsK3ItMSkvMjsKCXB1c2goaWQsIGwsIHIsIHZhbCk7CglpZighKHU+bSB8fCB2PGwpKXVwZGF0ZShpZCoyLCBsLCBtLCB1LCB2LCB2YWwsIHR5cGUpOwoJaWYoISh1PnIgfHwgdjxtKzEpKXVwZGF0ZShpZCoyKzEsIG0rMSwgciwgdSwgdiwgdmFsLCB0eXBlKTsKCWNudFt2YWxdW2lkXT1jbnRbdmFsXVtpZCoyXStjbnRbdmFsXVtpZCoyKzFdOwp9CgppbnQgbWFpbigpewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCWZyZW9wZW4oIm1leHF1ZXJ5LmlucCIsICJyIiwgc3RkaW4pOwoJZnJlb3BlbigibWV4cXVlcnkub3V0IiwgInciLCBzdGRvdXQpOwoJaW50IG47IGNpbj4+bjsKCWZvcihpbnQgaT0wOyBpPG47ICsraSljaW4+PmFbaV07Cglmb3IoaW50IGk9MDsgaTw9MzA7ICsraSlidWlsZCgxLCAwLCBuLTEsIGkpOwoJaW50IHE7IGNpbj4+cTsKCXdoaWxlKHEtLSl7CgkJaW50IHRtcDsKCQljaW4+PnRtcDsKCQlpZih0bXA9PTIpewoJCQlpbnQgbCwgcjsgY2luPj5sPj5yOwoJCQlsLS07IHItLTsKCQkJZm9yKGludCBpPTA7IGk8PTMxOyArK2kpewoJCQkJaWYoIWdldCgxLCAwLCBuLTEsIGwsIHIsIGkpKXsKCQkJCQljb3V0PDxpPDwnXG4nOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfWVsc2V7CgkJCWludCB1LCB2LCB0eXBlOyBjaW4+PnU+PnY+PnR5cGU7CgkJCXUtLTsgdi0tOwoJCQl2ZWN0b3I8aW50PiBjdXJyX2NudCgzMSwgMCk7CgkJCWZvcihpbnQgaT0wOyBpPD0zMDsgKytpKXsKCQkJCWN1cnJfY250W2ldPWdldCgxLCAwLCBuLTEsIHUsIHYsIGkpOwoJCQkJdXBkYXRlKDEsIDAsIG4tMSwgdSwgdiwgaSwgMCk7CgkJCX0KCQkJdj11OwoJCQlpZih0eXBlPT0xKXsKCQkJCWZvcihpbnQgaT0wOyBpPD0zMDsgKytpKXsKCQkJCQl2Kz1jdXJyX2NudFtpXTsKCQkJCQlpZihjdXJyX2NudFtpXSl1cGRhdGUoMSwgMCwgbi0xLCB1LCB2LTEsIGksIDEpOwoJCQkJCXUrPWN1cnJfY250W2ldOwoJCQkJfQoJCQl9ZWxzZXsKCQkJCWZvcihpbnQgaT0zMDsgaT49MDsgLS1pKXsKCQkJCQl2Kz1jdXJyX2NudFtpXTsKCQkJCQlpZihjdXJyX2NudFtpXSl1cGRhdGUoMSwgMCwgbi0xLCB1LCB2LTEsIGksIDEpOwoJCQkJCXUrPWN1cnJfY250W2ldOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIDA7Cn0K