1 #include <iostream>
2 #include <cstdio>
3
4 using namespace std;
5
6 int an[200010];
7 struct Node
8 {
9 int l;
10 int r;
11 int ma;
12 }bn[800010];
13
14 void build(int k,int l,int r)
15 {
16 bn[k].l=l;
17 bn[k].r=r;
18 if(l==r)
19 {
20 bn[k].ma=an[l];
21 return ;
22 }
23 int lk=k*2;
24 int rk=lk+1;
25 int mid=(l+r)/2;
26 build(lk,l,mid);
27 build(rk,mid+1,r);
28 bn[k].ma=max(bn[lk].ma,bn[rk].ma);
29 }
30
31 void change(int k,int i,int a)
32 {
33 if(bn[k].l==i&&bn[k].r==i)
34 {
35 bn[k].ma=a;
36 return ;
37 }
38 int lk=k*2;
39 int rk=lk+1;
40 if(bn[lk].r>=i)
41 change(lk,i,a);
42 else if(bn[rk].l<=i)
43 change(rk,i,a);
44 bn[k].ma=max(bn[lk].ma,bn[rk].ma);
45 }
46
47 int search(int k,int l,int r)
48 {
49 if(bn[k].l==l&&bn[k].r==r)
50 {
51 return bn[k].ma;
52 }
53 int lk=k*2;
54 int rk=lk+1;
55 if(bn[lk].r>=r)
56 return search(lk,l,r);
57 else if(bn[rk].l<=l)
58 return search(rk,l,r);
59 else
60 return max(search(lk,l,bn[lk].r),search(rk,bn[rk].l,r));
61 }
62
63 int main()
64 {
65 int n,m;
66 while(scanf("%d%d",&n,&m)!=EOF)
67 {
68 for(int i=1;i<=n;i++)
69 scanf("%d",&an[i]);
70 build(1,1,n);
71 for(int i=0;i<m;i++)
72 {
73 char ca;
74 int a,b;
75 scanf(" %c ",&ca);
76 scanf("%d%d",&a,&b);
77 if(ca=='Q')
78 printf("%d\n",search(1,a,b));
79 else if(ca=='U')
80 change(1,a,b);
81 }
82 }
83 return 0;
84 }