#include<stdio.h>
#include<algorithm>
#include<math.h>
#define maxn 500010
using namespace std;
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
int n,x,m;
int v[maxn];
int y,cod,l,r,poz;
int maxx;
void update(int i,int st,int dr){
if(st!=dr){
int m=(st+dr)/2;
if(poz<=m)
update(2*i,st,m);
else
update(2*i+1,m+1,dr);
v[i]=max(v[2*i],v[2*i+1]);
}
else
v[i]=x;
}
void maxi(int i,int st,int dr){
if(st>=l && r>=dr){
maxx=max(maxx,v[i]);
return;
}
else{
int m=(st+dr)/2;
if(r<=m)
maxi(2*i,st,m);
else
if(l>m)
maxi(2*i+1,m+1,dr);
else{
maxi(2*i,st,m);
maxi(2*i+1,m+1,dr);
}
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=n;i++){
//f>>x;
fscanf(f,"%d",&x);
poz=i;
update(1,1,n);
}
for(int i=1;i<=m;i++){
//f>>cod>>x>>y;
fscanf(f,"%d%d%d",&cod,&x,&y);
if(cod==1){
poz=x;
x=y;
update(1,1,n);
}
else{
maxx=-1;
l=x;
r=y;
maxi(1,1,n);
fprintf(g,"%ld\n",maxx);
}
}
return 0;
}