#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,a,b,op,pos,x,st1,dr1,maxim,Max[400088];
void update(int nod,int st,int dr){
if(st==dr){Max[nod]=x;return;}
int mid=(st+dr)/2;
if(pos<=mid) update(nod*2,st,mid);
else update(nod*2+1,mid+1,dr);
Max[nod]=max(Max[2*nod],Max[2*nod+1]);
}
void query(int nod,int st,int dr){
if(st1<=st&&dr<=dr1){maxim=max(maxim,Max[nod]);return;}
int mid=(st+dr)/2;
if(st1<=mid) query(2*nod,st1,mid);
if(mid<dr1) query(2*nod+1,mid+1,dr1);
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1;i<=n;++i){
scanf("%d",&x);
pos=i;update(1,1,n);
}
for(int i=1;i<=m;++i){
scanf("%d%d%d", &op,&a, &b);
if(op==0){
maxim=-1;
st1=a;dr1=b;
query(1,1,n);
printf("%d\n",maxim);
}else {pos=a;x=b;update(1,1,n);}
}
return 0;
}