#include <cstdio>
#include <algorithm>
using namespace std;
int i,n,m,x,sol,A[200010],op,y;
void upd(int nod,int a,int b,int st,int dr)
{
int mij;
if(a<=st && dr<=b)
{
A[nod]=x;
return;
}
else
{
mij=st+(dr-st)/2;
if(a<=mij)
upd(2*nod,a,b,st,mij);
else upd(2*nod+1,a,b,mij+1,dr);
if(2*nod+1<2*n)
A[nod]=max(A[2*nod],A[2*nod+1]);
else if(2*nod<2*n)
A[nod]=2*nod;
}
}
void find(int nod,int a,int b,int st,int dr)
{
int mij;
if(a<=st && dr<=b)
{
sol=max(sol,A[nod]);
return;
}
else
{
mij=st+(dr-st)/2;
if(a<=mij)
find(2*nod,a,b,st,mij);
if(mij<b) find(2*nod+1,a,b,mij+1,dr);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d\n",&n,&m);
for(i=1; i<=n; ++i)
{
scanf("%d ",&x);
upd(1,i,i,1,n);
}
for(i=1; i<=m; ++i)
{
scanf("%d %d %d\n",&op,&y,&x);
if(op==0)
{
sol=0;
find(1,y,x,1,n);
printf("%d\n",sol);
}
else upd(1,y,y,1,n);
}
return 0;
}