模板题
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 3e5;
typedef long long ll;
ll Max[4 * maxn];
void pushUp(int i)
{
Max[i] = max(Max[i * 2],Max[i * 2 + 1]);
}
void build(int i,int l,int r)
{
if(l == r)
{
cin>>Max[i];
return;
}
int mid = (l + r) / 2;
build(i * 2,l,mid);
build(i * 2 + 1,mid + 1,r);
pushUp(i);
}
ll query(int ql,int qr,int i,int l,int r)
{
if(ql <= l && r <= qr) return Max[i];
int m = (l + r) / 2;
ll ans = -1;
if(ql <= m) ans = max(query(ql,qr,i * 2,l,m),ans);
if(qr > m) ans = max(ans,query(ql,qr,i * 2 + 1,m + 1,r));
return ans;
}
void update(int pos,int i,int val,int l,int r)
{
if(l == r)
{
Max[i] = val;
return;
}
int mid = (l + r) / 2;
if(pos <= mid)
update(pos,i * 2,val,l,mid);
else
update(pos,i * 2 + 1,val,mid + 1,r);
pushUp(i);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
int N,M;
while(cin>>N>>M)
{
build(1,1,N);
int x,y;
string str;
for(int i = 1;i <= M;++i)
{
cin>>str>>x>>y;
if(str[0] == 'Q')
cout<<query(x,y,1,1,N)<<endl;
else
update(x,1,y,1,N);
}
}
return 0;
}