#include<stdio.h>
#define NMAX 100000
int op,a,b,i,n,m,val,poz,st,fin,max,arb[4*NMAX];
void update(int i,int l,int r) {
if(l==r) arb[i]=val;
else {
int mid=l+(r-l)/2;
if(poz>mid) update(2*i+1,mid+1,r);
else update(2*i,l,mid);
arb[i]=(arb[2*i]>arb[2*i+1])?arb[2*i]:arb[2*i+1];
}
}
void query(int i,int l, int r) {
if((st<=l)&&(fin>=r)) {
if(max<arb[i]) max=arb[i];
}
else {
int mid=l+(r-l)/2;
if(st<=mid) query(2*i,l,mid);
if(fin>mid) query(2*i+1,mid+1,r);
}
}
int main() {
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<2*n;i++) arb[i]=0;
for(i=0;i<n;i++) {
scanf("%d",&val);
poz=i+1;
update(1,1,n);
}
for(i=0;i<m;i++) {
scanf("%d %d %d",&op,&a,&b);
if(op) {
poz=a;
val=b;
update(1,1,n);
}
else {
max=0;
st=a;
fin=b;
query(1,1,n);
printf("%d\n",max);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}