#include <cstdio>
#include <iostream>
using namespace std;
#define DN 100001
int m,n,arb[DN<<1],val,poz,rez,ls,ld;
void actualizare(int sursa,int st,int dr) {
if(st==dr) {arb[sursa]=val; return; }
int mij=(st+dr)/2;
if(poz<=mij) actualizare(2*sursa,st,mij);
else actualizare(2*sursa+1,mij+1,dr);
arb[sursa]=max(arb[2*sursa],arb[2*sursa+1]);
}
void it(int sursa,int st,int dr) {
if(ls<=st && dr<=ld) {
if(rez<arb[sursa]) rez=arb[sursa];
return;
}
int mij=(st+dr)/2;
if(ls<=mij) it(sursa*2,st,mij);
else it(sursa*2+1,mij+1,dr);
}
int main()
{
int i,op,p1,p2;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++) {
scanf("%d",&val);
poz=i;
actualizare(1,1,n);
}
for(i=1;i<=m; i++) {
scanf("%d %d %d",&op,&p1,&p2);
if(!op) {
rez=-1;
ls=p1,ld=p2;
it(1,1,n);
printf("%d\n",rez);
}
else {
poz=p1; val=p2;
actualizare(1,1,n);
}
}
return 0;
}