#include<stdio.h>
int n,m,v[600001];
int poz,x,k,a,b,max;
void arb(int nod,int st,int dr)
{ if(st==dr)
{ v[nod]=x;
return;
}
int mij=(st+dr)/2;
if(poz<=mij) arb(2*nod,st,mij);
else arb(2*nod+1,mij+1,dr);
if(v[2*nod]>v[2*nod+1]) v[nod]=v[2*nod];
else v[nod]=v[2*nod+1];
}
void cauta(int nod,int st,int dr)
{ if(a<=st&&dr<=b)
{ if(max<v[nod]) max=v[nod];
return;
}
int mij=(st+dr)/2;
if(a<=mij) cauta(2*nod,st,mij);
if(mij<b) cauta(nod*2+1,mij+1,dr);
}
int main()
{ freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{ scanf("%d",&x);
poz=i;
arb(1,1,n);
}
for(i=1;i<=m;i++)
{ scanf("%d%d%d",&k,&a,&b);
if(k==0)
{ max=-1;
cauta(1,1,n);
printf("%d\n",max);
}
else
{ poz=a;
x=b;
arb(1,1,n);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}