#include <bits/stdc++.h>
using namespace std;
//update(st,dr,nod)
int h[400001],n,idx,nr,x,m,l,r,flag;
//int hmin[400001];
void update(int st, int dr, int pos){
if(st==dr){
h[pos]=nr;
return;
}
int mid=(st+dr)/2;
if(idx<=mid) update(st,mid,2*pos);
else update(mid+1,dr,2*pos+1);
h[pos]=max(h[2*pos],h[2*pos+1]);
}
int query(int st,int dr,int pos){
//l,d interval pe care cautam sol;
if(l<=st && dr<=r) return h[pos];
int mid=(st+dr)/2;
int left=0,right=0;
if(l<=mid) left=query(st,mid,2*pos);
if(r>mid) right=query(mid+1,dr,2*pos+1);
return max(left,right);
}
/*
void updatemin(int st, int dr, int pos){
if(st==dr){
hmin[pos]=nr;
return;
}
int mid=(st+dr)/2;
if(idx<=mid) updatemin(st,mid,2*pos);
else updatemin(mid+1,dr,2*pos+1);
hmin[pos]=min(hmin[2*pos],hmin[2*pos+1]);
}
int querymin(int st,int dr,int pos){
//l,d interval pe care cautam sol;
if(l<=st && dr<=r) return hmin[pos];
int mid=(st+dr)/2;
int left=0,right=0;
if(l<=mid) left=querymin(st,mid,2*pos);
if(r>mid) right=querymin(mid+1,dr,2*pos+1);
return min(left,right);
}
*/
int main(){
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
idx=i;
nr=x;
update(1,n,1);
// updatemin(1,n,1);
}
for(int i=1;i<=m;i++){
cin>>flag>>l>>r;
if(flag){
idx = l;
nr = r;
update(1,n,1);
} else {
cout << query(1, n, 1);
cout<<'\n';
}
}
}