#include <stdio.h>
int x,y,c,n,m,i;
int arb[300000];
void add(int nod,int L,int R)
{
int M;
if(L==x&&x==R) arb[nod]=y;
else
{
M=(L+R)/2;
if(x<=M) add(2*nod,L,M);
else
if(M<x) add(2*nod+1,M+1,R);
arb[nod]=arb[2*nod];
if(arb[nod]<arb[2*nod+1]) arb[nod]=arb[2*nod+1];
}
}
int src(int nod,int L,int R)
{
int M,aux1=0,aux2=0;
if(x<=L&&R<=y) return arb[nod];
else
{
M=(L+R)/2;
if(x<=M) aux1=src(2*nod,L,M);
if(M<y) aux2=src(2*nod+1,M+1,R);
if(aux1>aux2) return aux1;
else return aux2;
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(x=1;x<=n;x++)
{
scanf("%d",&y);
add(1,1,n);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&c,&x,&y);
switch(c)
{
case 0:
printf("%d\n",src(1,1,n));
break;
case 1:
add(1,1,n);
break;
}
}
return 0;
}