#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+5;
const int M=2200001;
int n,m,cnt,top,a,b,X[N],A[N],B[N],v[N],num[N<<1],K[N],L[30],R[30];
int root[N],ls[M],rs[M],sum[M];
int lowbit(int x){
return x&-x;
}
void insert(int &k,int last,int l,int r,int x,int add){
k=++cnt;
int mid=l+r>>1;
ls[k]=ls[last];
rs[k]=rs[last];
sum[k]=sum[last]+add;
if(l==r) return;
if(x<=mid) insert(ls[k],ls[last],l,mid,x,add);
else insert(rs[k],rs[last],mid+1,r,x,add);
}
int query(int l,int r,int k){
if(l==r) return l;
int mid=l+r>>1;
int suml=0,sumr=0;
for(int i=1;i<=a;i++)suml+=sum[ls[L[i]]];
for(int i=1;i<=b;i++)sumr+=sum[ls[R[i]]];
if(sumr-suml>=k){
for(int i=1;i<=a;i++) L[i]=ls[L[i]];
for(int i=1;i<=b;i++) R[i]=ls[R[i]];
return query(l,mid,k);
}
else{
for(int i=1;i<=a;i++) L[i]=rs[L[i]];
for(int i=1;i<=b;i++) R[i]=rs[R[i]];
return query(mid+1,r,k-(sumr-suml));
}
}
int main(){
scanf("%d%d",&n,&m);top=n;
for(int i=1;i<=n;i++) scanf("%d",&v[i]),num[i]=v[i];
char opt[6];
for(int i=1;i<=m;i++){
scanf("%s%d%d",opt,&A[i],&B[i]);
if(opt[0]==‘Q‘) scanf("%d",&X[i]),K[i]=1;
else num[++top]=B[i];
}
sort(num+1,num+top+1);
int tot=unique(num+1,num+top+1)-num-1;
for(int i=1;i<=n;i++){
int t=lower_bound(num+1,num+tot+1,v[i])-num;
for(int j=i;j<=n;j+=lowbit(j))
insert(root[j],root[j],1,tot,t,1);
}
for(int i=1;i<=m;i++){
if(K[i]){
a=0,b=0;A[i]--;
for(int j=A[i];j>=1;j-=lowbit(j)) L[++a]=root[j];
for(int j=B[i];j>=1;j-=lowbit(j)) R[++b]=root[j];
printf("%d\n",num[query(1,tot,X[i])]);
}
else{
int t=lower_bound(num+1,num+tot+1,v[A[i]])-num;
for(int j=A[i];j<=n;j+=lowbit(j))
insert(root[j],root[j],1,tot,t,-1);
v[A[i]]=B[i];
t=lower_bound(num+1,num+tot+1,v[A[i]])-num;
for(int j=A[i];j<=n;j+=lowbit(j))
insert(root[j],root[j],1,tot,t,1);
}
}
}