#include<fstream>
#define M ((l+r)/2)
const int maxn = 100000;
using namespace std;
int a[maxn],h[maxn*2];
int n,m;
void create(int l=1,int r=n, int nod =1){
if(l==r){
h[nod]=a[l];return;
}
// int m = (l+r)/2;
create(l,M,2*nod);
create(M+1,r,nod*2+1);
h[nod]=max(h[nod*2],h[nod*2+1]);
}
void update(int pos,int v,int l=1,int r=n, int nod=1){
if(r==l){
h[nod]=v;return;
}
//int m =(l+r)/2;
if(pos <= M) update(pos,v,l,M,nod*2);
else update(pos,v,M+1,r,nod*2+1);
h[nod]=max(h[nod*2],h[nod*2+1]);
}
int fmax(int a,int b,int l=1,int r=n,int nod=1){
if (a>r || b<l )return 0;
if(a<=l && b>=r)return h[nod];
//int m =(l+r)/2;
return max(fmax(a,b,l,M,nod*2),fmax(a,b,M+1,r,nod*2+1));
}
main(){
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>a[i];
}
create();
int a,x,y;
for(int i=1;i<=m;i++){
fin>>a>>x>>y;
if(a==0){
fout<<fmax(x,y)<<"\n";
}else{
update(x,y);
}
}
fin.close(); fout.close();
}