#include <bits/stdc++.h>
const int NMAX=1e5;
using namespace std;
int aint[4*NMAX],v[NMAX+1];
void constr(int p,int st,int dr){
if(st==dr){
aint[p]=v[st];
return;
}
int m=(st+dr)/2,fs=2*p,fd=2*p+1;
constr(fs,st,m);
constr(fd,m+1,dr);
aint[p]=max(aint[fs],aint[fd]);
}
void update(int p,int st,int dr,int poz,int val){
if(st==dr){
aint[p]=val;
return;
}
int m=(st+dr)/2,fs=2*p,fd=2*p+1;
if(poz<=m){
update(fs,st,m,poz,val);
}else{
update(fd,m+1,dr,poz,val);
}
aint[p]=max(aint[fs],aint[fd]);
}
int interog(int p,int st,int dr,int a,int b){
if(a<=st&&dr<=b){
return aint[p];
}
int m=(st+dr)/2,fs=2*p,fd=2*p+1;
int rezst=0,rezdr=0;
if(a<=m){
rezst=interog(fs,st,m,a,b);
}
if(m+1<=b){
rezdr=interog(fd,m+1,dr,a,b);
}
return max(rezst,rezdr);
}
int main(){
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,i,c,x,y;
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>v[i];
}
constr(1,1,n);
for(i=1;i<=m;i++){
fin>>c>>x>>y;
if(c==0){
fout<<interog(1,1,n,x,y)<<"\n";
}
else{
update(1,1,n,x,y);
}
}
return 0;
}