#include <cstdio>
#define maxd 100010*4+50
#include <algorithm>
using namespace std;
int a[maxd];
int n,m;
int vl,ps,c,d;
int mxm,st ,dc;
inline int md(int l,int r){
return l+(r-l)/2;
}
inline int left_son(int node){
return (node<<1);
}
inline int right_son(int node){
return (node<<1)|1;
}
void update(int node, int left,int right){
if(left==right){
a[node]=vl;
return;
}
else{
int mid=md(left,right);
if(ps <= mid)
update(left_son(node),left,mid);
else
update(right_son(node),mid+1,right);
a[node]=max(a[right_son(node)],a[left_son(node)]);
}
}
void qr(int node,int left,int right){
if(st<=left && right<=dc)
{mxm=max(mxm,a[node]);
return;
}
int mid=md(left,right);
if(st<=mid)
qr(left_son(node),left,mid);
if(mid<dc)
qr(right_son(node),mid+1,right);
}
int main(void){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf(" %d %d", &n, &m);
int i,x;
for(i=1;i<=n;i++){
scanf(" %d", &x);
ps=i,vl=x;
update(1,1,n);
}
while(m--){
scanf("%d %d %d",&x,&c,&d);
if(x){
ps=c;
vl=d;
update(1,1,n);
}
else{
mxm=-1;
st=c;
dc=d;
qr(1,1,n);
printf("%d\n",mxm);
}
}
}