#include <stdio.h>
using namespace std;
FILE *f,*g;
int n,m,x,a,b;
int arb[4*100001+100];
int POZ,MAX=0;
int MAXIMUL(int a,int b)
{
if(a>b)
return a;
return b;
}
void Update(int nod,int s,int d)
{
int M;
if(s==d)
{
arb[nod]=x;
return;
}
else
{
M=(s+d)/2;
if(POZ<=M)
Update(nod*2,s,M);
else
Update(nod*2+1,M+1,d);
arb[nod]=MAXIMUL(arb[2*nod],arb[2*nod+1]);
}
}
void Search(int nod,int s,int d)
{
int M;
if(a<=s && d<=b)
{
if(MAX<arb[nod])
MAX=arb[nod];
return;
}
M=(s+d)/2;
if(a<=M)
Search(2*nod,s,M);
if(M<b)
Search(2*nod+1,M+1,d);
}
void Solve()
{
int i,logic;
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&logic,&a,&b);
if(logic)
{
POZ=a;x=b;
Update(1,1,n);
}
else
{
MAX=0;
Search(1,1,n);
fprintf(g,"%d\n",MAX);
}
}
}
void Read()
{
fscanf(f,"%d %d",&n,&m);
int i;
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
POZ=i;
Update(1,1,n);
}
}
int main()
{
f=fopen("arbint.in","r");g=fopen("arbint.out","w");
Read();
Solve();
fclose(f),fclose(g);
return 0;
}