#include<bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define int long long
#define ll long long
#define maxn 100005
#define itachi ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fi first
#define sti string
#define se second
using namespace std;
const int MAX=500;
int block,a[maxn];
int freq[maxn],cnt[maxn];
int n,q,ans[maxn];
struct Update {
int pos,oldval,newval;
};
struct Query {
int l,r,t,id;
bool operator < (const Query &other) const {
int x=l/block; int y=other.l/block;
int X=r/block; int Y=other.r/block;
if(x != y) return x < y;
if(X != Y) return X < Y;
return t < other.t;
}
};
vector<Update> up;
void add(int pos){
int Val=a[pos];
int old=freq[Val];
int New=++freq[Val];
cnt[old]--;
cnt[New]++;
}
void sub(int pos){
int Val=a[pos];
int old=freq[Val];
int New=--freq[Val];
cnt[old]--;
cnt[New]++;
}
void apply(int t,int L,int R){
int pos=up[t].pos;
int old=a[pos];
int New=up[t].newval;
if(L<=pos && pos<=R){
sub(pos);
a[pos]=New;
add(pos);
}
else a[pos]=New;
}
void roll(int t,int L,int R){
int pos=up[t].pos;
int old=up[t].oldval;
int New=a[pos];
if(L<=pos && pos<=R){
sub(pos);
a[pos]=old;
add(pos);
}
else a[pos]=old;
}
vector<int> value;
int getid(int x){
return lower_bound(value.begin(),value.end(),x)-value.begin()+1;
}
signed main() {
itachi
cin>>n>>q;
for(int i=1;i<=n;i++) {
cin>>a[i];
value.push_back(a[i]);
}
vector<Query> que;
for(int i=1;i<=q;i++){
int opt;
cin>>opt;
if(opt==2){
int pos,x;
cin>>pos>>x;
value.push_back(x);
Update tmp={pos,a[pos],x};
a[pos]=x;
up.push_back(tmp);
}
else{
int l,r;
cin>>l>>r;
que.push_back({l,r,(int)up.size(),(int)que.size()});
}
}
sort(value.begin(),value.end());
value.erase(unique(value.begin(),value.end()),value.end());
for(int i=1;i<=n;i++) a[i]=getid(a[i]);
for(auto &tmp : up){
tmp.oldval=getid(tmp.oldval);
tmp.newval=getid(tmp.newval);
}
for(int i=(int)up.size()-1;i>=0;i--) a[up[i].pos]=up[i].oldval;
ll xxx=pow(max(1LL,n),2.0/3.0);
block=max(1LL,xxx);
sort(que.begin(),que.end());
int curL=1,curR=0,curT=0;
for(auto &tmp : que){
while(curL > tmp.l) add(--curL);
while(curR < tmp.r) add(++curR);
while(curL < tmp.l) sub(curL++);
while(curR > tmp.r) sub(curR--);
while(curT < tmp.t) apply(curT++,curL,curR);
while(curT > tmp.t) roll(--curT,curL,curR);
int res=MAX+1;
for(int x=1;x<=MAX;x++){
if(cnt[x]==0){
res=x;
break;
}
}
ans[tmp.id]=res;
}
for(int i=0;i<que.size();i++) cout<<ans[i]<<'\n';
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zLHVucm9sbC1sb29wcyIpCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIG1heG4gMTAwMDA1CiNkZWZpbmUgaXRhY2hpIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHN0aSBzdHJpbmcKI2RlZmluZSBzZSBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYPTUwMDsKaW50IGJsb2NrLGFbbWF4bl07CmludCBmcmVxW21heG5dLGNudFttYXhuXTsKaW50IG4scSxhbnNbbWF4bl07CgpzdHJ1Y3QgVXBkYXRlIHsKICAgaW50IHBvcyxvbGR2YWwsbmV3dmFsOwp9OwoKc3RydWN0IFF1ZXJ5IHsKICAgaW50IGwscix0LGlkOwogICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IFF1ZXJ5ICZvdGhlcikgY29uc3QgewogICAgICBpbnQgeD1sL2Jsb2NrOyBpbnQgeT1vdGhlci5sL2Jsb2NrOwogICAgICBpbnQgWD1yL2Jsb2NrOyBpbnQgWT1vdGhlci5yL2Jsb2NrOwogICAgICBpZih4ICE9IHkpIHJldHVybiB4IDwgeTsKICAgICAgaWYoWCAhPSBZKSByZXR1cm4gWCA8IFk7CiAgICAgIHJldHVybiB0IDwgb3RoZXIudDsKICAgfQp9OwoKdmVjdG9yPFVwZGF0ZT4gdXA7Cgp2b2lkIGFkZChpbnQgcG9zKXsKICAgaW50IFZhbD1hW3Bvc107CiAgIGludCBvbGQ9ZnJlcVtWYWxdOwogICBpbnQgTmV3PSsrZnJlcVtWYWxdOwogICBjbnRbb2xkXS0tOwogICBjbnRbTmV3XSsrOwp9Cgp2b2lkIHN1YihpbnQgcG9zKXsKICAgaW50IFZhbD1hW3Bvc107CiAgIGludCBvbGQ9ZnJlcVtWYWxdOwogICBpbnQgTmV3PS0tZnJlcVtWYWxdOwogICBjbnRbb2xkXS0tOwogICBjbnRbTmV3XSsrOwp9CgoKdm9pZCBhcHBseShpbnQgdCxpbnQgTCxpbnQgUil7CiAgIGludCBwb3M9dXBbdF0ucG9zOwogICBpbnQgb2xkPWFbcG9zXTsKICAgaW50IE5ldz11cFt0XS5uZXd2YWw7CiAgIGlmKEw8PXBvcyAmJiBwb3M8PVIpewogICAgICBzdWIocG9zKTsKICAgICAgYVtwb3NdPU5ldzsKICAgICAgYWRkKHBvcyk7CiAgIH0KICAgZWxzZSBhW3Bvc109TmV3Owp9Cgp2b2lkIHJvbGwoaW50IHQsaW50IEwsaW50IFIpewogICBpbnQgcG9zPXVwW3RdLnBvczsKICAgaW50IG9sZD11cFt0XS5vbGR2YWw7CiAgIGludCBOZXc9YVtwb3NdOwogICBpZihMPD1wb3MgJiYgcG9zPD1SKXsKICAgICAgc3ViKHBvcyk7CiAgICAgIGFbcG9zXT1vbGQ7CiAgICAgIGFkZChwb3MpOwogICB9CiAgIGVsc2UgYVtwb3NdPW9sZDsKfQoKdmVjdG9yPGludD4gdmFsdWU7CgppbnQgZ2V0aWQoaW50IHgpewogICByZXR1cm4gbG93ZXJfYm91bmQodmFsdWUuYmVnaW4oKSx2YWx1ZS5lbmQoKSx4KS12YWx1ZS5iZWdpbigpKzE7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaXRhY2hpCiAgICBjaW4+Pm4+PnE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgIGNpbj4+YVtpXTsKICAgICAgICB2YWx1ZS5wdXNoX2JhY2soYVtpXSk7CiAgICB9CiAgICB2ZWN0b3I8UXVlcnk+IHF1ZTsKICAgIGZvcihpbnQgaT0xO2k8PXE7aSsrKXsKICAgICAgICBpbnQgb3B0OwogICAgICAgIGNpbj4+b3B0OwogICAgICAgIGlmKG9wdD09Mil7CiAgICAgICAgICAgIGludCBwb3MseDsKICAgICAgICAgICAgY2luPj5wb3M+Png7CiAgICAgICAgICAgIHZhbHVlLnB1c2hfYmFjayh4KTsKICAgICAgICAgICAgVXBkYXRlIHRtcD17cG9zLGFbcG9zXSx4fTsKICAgICAgICAgICAgYVtwb3NdPXg7CiAgICAgICAgICAgIHVwLnB1c2hfYmFjayh0bXApOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpbnQgbCxyOwogICAgICAgICAgICBjaW4+Pmw+PnI7CiAgICAgICAgICAgIHF1ZS5wdXNoX2JhY2soe2wsciwoaW50KXVwLnNpemUoKSwoaW50KXF1ZS5zaXplKCl9KTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KHZhbHVlLmJlZ2luKCksdmFsdWUuZW5kKCkpOwogICAgdmFsdWUuZXJhc2UodW5pcXVlKHZhbHVlLmJlZ2luKCksdmFsdWUuZW5kKCkpLHZhbHVlLmVuZCgpKTsKCiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgYVtpXT1nZXRpZChhW2ldKTsKICAgIGZvcihhdXRvICZ0bXAgOiB1cCl7CiAgICAgICAgdG1wLm9sZHZhbD1nZXRpZCh0bXAub2xkdmFsKTsKICAgICAgICB0bXAubmV3dmFsPWdldGlkKHRtcC5uZXd2YWwpOwogICAgfQogICAgZm9yKGludCBpPShpbnQpdXAuc2l6ZSgpLTE7aT49MDtpLS0pIGFbdXBbaV0ucG9zXT11cFtpXS5vbGR2YWw7CiAgICBsbCB4eHg9cG93KG1heCgxTEwsbiksMi4wLzMuMCk7CiAgICBibG9jaz1tYXgoMUxMLHh4eCk7CiAgICBzb3J0KHF1ZS5iZWdpbigpLHF1ZS5lbmQoKSk7CiAgICBpbnQgY3VyTD0xLGN1clI9MCxjdXJUPTA7CiAgICBmb3IoYXV0byAmdG1wIDogcXVlKXsKICAgICAgICB3aGlsZShjdXJMID4gdG1wLmwpIGFkZCgtLWN1ckwpOwogICAgICAgIHdoaWxlKGN1clIgPCB0bXAucikgYWRkKCsrY3VyUik7CiAgICAgICAgd2hpbGUoY3VyTCA8IHRtcC5sKSBzdWIoY3VyTCsrKTsKICAgICAgICB3aGlsZShjdXJSID4gdG1wLnIpIHN1YihjdXJSLS0pOwogICAgICAgIHdoaWxlKGN1clQgPCB0bXAudCkgYXBwbHkoY3VyVCsrLGN1ckwsY3VyUik7CiAgICAgICAgd2hpbGUoY3VyVCA+IHRtcC50KSByb2xsKC0tY3VyVCxjdXJMLGN1clIpOwogICAgICAgIGludCByZXM9TUFYKzE7CiAgICAgICAgZm9yKGludCB4PTE7eDw9TUFYO3grKyl7CiAgICAgICAgICAgIGlmKGNudFt4XT09MCl7CiAgICAgICAgICAgICAgICByZXM9eDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFuc1t0bXAuaWRdPXJlczsKICAgIH0KICAgIGZvcihpbnQgaT0wO2k8cXVlLnNpemUoKTtpKyspIGNvdXQ8PGFuc1tpXTw8J1xuJzsKICAgIHJldHVybiAwOwp9Cg==