#include <bits/stdc++.h>
#define NMAX 100000
#define LOG2 17
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,x,arb[4*NMAX+5],m,c,a,b,maxim;
void update(int nod,int indice,int val,int l,int r){
if(l==r){
arb[nod]=val;
return;
}
int mij=(l+r)/2;
if(indice<=mij){
update(2*nod,indice,val,l,mij);
}else{
update(2*nod+1,indice,val,mij+1,r);
}
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int l,int r){
if(a<=l&&r<=b){
maxim=max(maxim,arb[nod]);
return;
}
int mij=(l+r)/2;
if(a<=mij){
query(nod*2,l,mij);
}
if(mij<b){
query(nod*2+1,mij+1,r);
}
}
int main(){
f>>n>>m;
for(int i=1;i<=n;i++){
f>>x;
update(1,i,x,1,n);
}
while(m--){
f>>c>>a>>b;
if(c==0){
maxim=0;
query(1,1,n);
g<<maxim<<'\n';
}else{
update(1,a,b,1,n);
}
}
f.close();
g.close();
return 0;
}