#include <cstdio>
#include <algorithm>
#define N 100003
using namespace std;
int arbi[4*N];
int n,m;
int pos,val,start,stop,maxim;
void Update(int nod,int left,int right)
{
if(left==right)
{
arbi[nod]=val;
return ;
}
int mij;
mij=(left+right)/2;
if(pos<=mij) Update(2*nod,left,mij);
else Update(2*nod+1,mij+1,right);
arbi[nod]=max(arbi[2*nod],arbi[2*nod+1]);
}
void Query(int nod,int left,int right)
{
if(start<=left && right<=stop)
{
if(maxim<arbi[nod]) maxim=arbi[nod];
return;
}
int mij;
mij=(left+right)/2;
if(mij>=start) Query(2*nod,left,mij);
if(mij<stop) Query(2*nod+1,mij+1,right);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
int i,x,j,op,q,p;
for(i=1; i<=n; i++)
{
scanf("%d",&x);
pos=i;
val=x;
Update(1,1,n);
}
for(i=1; i<=n; i++)
{
scanf("%d %d %d ",&op,&p,&q);
if(op)
{
pos=p;
val=q;
Update(1,1,n);
}
else
{
start=p;
stop=q;
maxim=0;
Query(1,1,n);
printf("%d ",maxim);
}
}
return 0;
}