#include <stdio.h>
#define Nmax 100100
int n,m,arb[Nmax*3],max;
void up(int st,int dr,int x,int y,int pas)
{
if(st==dr)
arb[pas]=y;
else
{
if(x<=(st+dr)/2)
up(st,(st+dr)/2,x,y,pas*2);
else
if(x>(st+dr)/2)
up((st+dr)/2+1,dr,x,y,pas*2+1);
arb[pas]=arb[pas*2];
if(arb[pas*2+1]>arb[pas])
arb[pas]=arb[pas*2+1];
}
}
void q(int st,int dr,int x,int y,int pas)
{
if(x<=st && y>=dr)
{
if(arb[pas]>max)
max=arb[pas];
}
else
{
if(x<=(st+dr)/2)
q(st,(st+dr)/2,x,y,pas*2);
if(y>(st+dr)/2)
q((st+dr)/2+1,dr,x,y,pas*2+1);
}
}
int main()
{
int i,x,y,op;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&x);
up(1,n,i,x,1);
}
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&op,&x,&y);
if(op==1)
up(1,n,x,y,1);
else
{
max=0;
q(1,n,x,y,1);
printf("%d\n",max);
}
}
return 0;
}