#include<cstdio>
int heap[140000];
void update(int ind,int li,int lf,int &i,int &x)
{
if(li==lf)heap[ind]=x;
else
{
int m=(li+lf)/2;
if(i<=m)update(2*ind,li,m,i,x);
else update(2*ind+1,m+1,lf,i,x);
heap[ind]=heap[2*ind]>heap[2*ind+1]?heap[2*ind]:heap[2*ind+1];
//expresia conditzionala: expresie?val_adevar:val_fals
}
}
int getmax(int i,int li,int lf,int a,int b)
{
if(a<=li&&lf<=b)return heap[i];
int m=(li+lf)/2,mx=0,m1;
if(a<=m)mx=getmax(2*i,li,m,a,b);
if(b>=m+1)
{
m1=getmax(2*i+1,m+1,lf,a,b);
if(m1>mx)mx=m1;
}
return mx;
}
int main()
{
FILE *f=fopen("arbint.in","r"),*g=fopen("arbint.out","w");
int n,m,x,a,b,t;
fscanf(f,"%d%d",&n,&m);
int i;
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
update(1,1,n,i,x);
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&t,&a,&b);
if(t==0)fprintf(g,"%d\n",getmax(1,1,n,a,b));
else update(1,1,n,a,b);
}
return 0;
}