#include<bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
long long int v[100001],s[400001];
void maketree(int i,int p,int q){
if(p==q){
s[i]=v[p];
}
else{
int m=(p+q)/2;
maketree(i*2,p,m);
maketree(i*2+1,m+1,q);
s[i]=max(s[i*2],s[i*2+1]);
}
}
void update(int i,int p,int q,int x,int y){
if(p==q && p==x){
s[i]=y;
}
else{
int mij=(p+q)/2;
if(x<=mij){
update(i*2,p,mij,x,y);
}
else{
update(i*2+1,mij+1,q,x,y);
}
s[i]=max(s[i*2],s[i*2+1]);
}
}
long long int suma(int i, int p, int q, int x, int y){
if(x<=p && q<=y){
return s[i];
}
else{
long long int val1=0;
long long int val2=0;
int m=(p+q)/2;
if(x<=m){
val1=suma(i*2,p,m,x,y);
}
if(m<y){
val2=suma(i*2+1,m+1,q,x,y);
}
return max(val1,val2);
}
}
int main()
{
int n,m;
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>v[i];
}
maketree(1,1,n);
int x,y,op;
for(int i=1;i<=m;++i){
fin>>op>>x>>y;
if(op==1){
v[x]=y;
update(1,1,n,x,y);
}else
if(op==0){
fout<<suma(1,1,n,x,y)<<endl;
}}
return 0;
}