#include <stdio.h>
#define inf 1999999999
#define p2 500000
#define nmax 100001
int arb[p2],nr[nmax],a,b,maxim,val,k,n,m;
inline int max(int q,int z)
{
if(q>z)return q;
else return z;
return 0;
}
void actualizare(int nod,int st,int dr)
{ int mij;
if(st==dr){
arb[nod]=val;
return;
}
else
{
mij=(st+dr)/2;
if(k<=mij)actualizare(2*nod,st,mij);
else actualizare(2*nod+1,mij+1,dr);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
}
void interogare(int nod,int st,int dr)
{ int mij;
if(a<=st&&dr<=b){
if(arb[nod]>maxim)maxim=arb[nod];
}
else{
mij=(st+dr)/2;
if(a<=mij)interogare(2*nod,st,mij);
if(mij<b)interogare(2*nod+1,mij+1,dr);
}
}
void citire()
{ int i,op;
freopen("arbint.in","r",stdin);
scanf("%d %d\n",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d ",&nr[i]);
k=i; val=nr[i];
actualizare(1,1,n);
}
for(i=1;i<=m;++i)
{
scanf("%d %d %d\n",&op,&a,&b);
if(op==0){
maxim=-inf;
interogare(1,1,n);
printf("%d\n",maxim);
}
else
{
k=a; val=b;
actualizare(1,1,n);
}
}
}
int main()
{
freopen("arbint.out","w",stdout);
citire();
fclose(stdout);
return 0;
}