1 #include<iostream>
2 #include<string>
3 #include<algorithm>
4 #include<cstdlib>
5 #include<cstdio>
6 #include<set>
7 #include<map>
8 #include<vector>
9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #include <bits/stdc++.h>
14 using namespace std;
15
16 int MAX[4000001];
17 //int max(int a,int b)
18 //{
19 // return a>b?a:b;
20 //}
21 void pushup(int rt)
22 {
23 MAX[rt]=max(MAX[rt<<1],MAX[(rt<<1)+1]);
24 }
25 void build(int l,int r,int rt)
26 {
27 if(l==r)
28 {
29 scanf("%d",&MAX[rt]);
30 return;
31 }
32 int m=(l+r)>>1;
33 build(l,m,rt<<1);
34 build(m+1,r,(rt<<1)+1);
35 pushup(rt);
36 }
37 void update(int p,int q,int l,int r,int rt)
38 {
39 if(l==r)
40 {
41 MAX[rt]=q;
42 return;
43 }
44 int m=(l+r)>>1;
45 if(p<=m)
46 update(p,q,l,m,rt<<1);
47 else
48 update(p,q,m+1,r,(rt<<1)+1);
49 pushup(rt);
50 }
51 int getmax(int L,int R,int l,int r,int rt)
52 {
53 if(L<=l&&r<=R)
54 return MAX[rt];
55 int m=(r+l)>>1;
56 int ret=0;
57 if(L<=m)
58 ret=max(ret,getmax(L,R,l,m,rt<<1));
59 if(R>m)
60 ret=max(ret,getmax(L,R,m+1,r,(rt<<1)+1));
61 return ret;
62 }
63 int main()
64 {
65 int n,m,a,b,i;
66 char c;
67 while(~scanf("%d %d",&n,&m))
68 {
69 build(1,n,1);
70 for(i=0; i<m; i++)
71 {
72 scanf("%*c%c%d %d",&c,&a,&b);//*c与getchar一样
73 if(c=='Q')
74 printf("%d\n",getmax(a,b,1,n,1));
75 else
76 update(a,b,1,n,1);
77 }
78 }
79 return 0;
80 }