#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int data[N],m,n;
struct tree{
int l,r,ma;
}tr[(N<<2)+5];
void pu(int p){
tr[p].ma=max(tr[p<<1].ma,tr[p<<1|1].ma);
}
void build(int p,int l,int r){
tr[p].l=l,tr[p].r=r;
if(l==r){
tr[p].ma=data[l];
return ;
}
int mid=l+r>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
pu(p);
}
int ask(int p,int l,int r){
if(l<=tr[p].l&&tr[p].r<=r){
return tr[p].ma;
}
int ans=0;
int mid=tr[p].l+tr[p].r>>1;
if(l<=mid) ans=max(ans,ask(p<<1,l,r));
if(r>mid) ans=max(ans,ask(p<<1|1,l,r));
return ans;
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++) cin>>data[i];
build(1,1,m);
for(int i=1;i<=n;i++){
char c;
int a,b;
cin>>c>>a>>b;
if(c=='Q')
cout<<ask(1,a,b)<<'\n';
else{
if(data[a]<data[b]){
swap(data[a],data[b]);
build(1,1,m);
}
}
}
return 0;
}