#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m;
int A[4*DIM+1],v[DIM];
void update(int nod,int p,int u,int poz,int val){
if(p==u){
A[nod]=val;
return;
}
int mid=p+(u-p)/2;
if(poz<=mid) update(2*nod,p,mid,poz,val);
else update(2*nod+1,mid+1,u,poz,val);
A[nod]=max(A[2*nod],A[2*nod+1]);
}
int query(int nod,int p,int u,int a,int b){
if(a<=p && u<=b)
return A[nod];
int m1=0,m2=0,mid=p+(u-p)/2;
if(a<=mid)
m1=query(2*nod,p,mid,a,b);
if(b>mid)
m2=query(2*nod+1,mid+1,u,a,b);
return max(m1,m2);
}
int main(void){
register int i,j,a,b,t;
f>>n>>m;
for(i=1;i<=n;i++)
f>>v[i],update(1,1,n,i,v[i]);
for(i=1;i<=m;i++){
f>>t>>a>>b;
if(t==0)
g<<query(1,1,n,a,b)<<"\n";
else
update(1,1,n,a,b);
}
f.close();
g.close();
return 0;
}