1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<algorithm>
5 #define ll l,mid,rt<<1
6 #define rr mid+1,r,rt<<1|1
7 #define maxn 200005
8 using namespace std;
9 int read(){
10 int x=0,f=1;char ch=getchar();
11 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
12 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
13 return x*f;
14 }
15 int n,m,sum[maxn<<2];
16 void build(int l,int r,int rt){
17 if(l==r){
18 scanf("%d",&sum[rt]);
19 return ;
20 }
21 int mid=(l+r)>>1;
22 build(ll);build(rr);
23 sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
24 }
25 void update(int pos,int change,int l,int r,int rt){
26 if(l==r){
27 if(sum[rt]<change) sum[rt]=change;//多了个判断,wa了5个点开始
28 return ;
29 }
30 int mid=(l+r)>>1;
31 if(pos<=mid) update(pos,change,ll);
32 else update(pos,change,rr);
33 sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
34 }
35 int query(int ql,int qr,int l,int r,int rt){
36 if(ql<=l&&r<=qr)
37 return sum[rt];
38 int mid=(l+r)>>1;
39 int ans=0;
40 if(ql<=mid) ans=max(ans,query(ql,qr,ll));
41 if(qr>mid) ans=max(ans,query(ql,qr,rr));
42 return ans;
43 }
44 int main(){
45 scanf("%d%d",&n,&m);
46 build(1,n,1);
47 while(m--){
48 char Q[3];
49 int a,b;
50 scanf("%s%d%d",Q,&a,&b);
51 if(Q[0]=='Q') printf("%d\n",query(a,b,1,n,1));
52 else update(a,b,1,n,1);
53 }
54 return 0;
55 }