#include <stdio.h>
#include <stdlib.h>
#define INF 1
int s[2000001],nrmax;
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
void update(int st,int dr,int x,int pos,int k)
{
if(st<dr){
if(k<=(st+dr)/2)
update(st,(st+dr)/2,x,pos*2,k);
else
update((st+dr)/2+1,dr,x,pos*2+1,k);
s[pos]=max(s[pos*2],s[pos*2+1]);
}
else
s[pos]=x;
}
int search_max(int st,int dr,int pos,int a,int b)
{
if(a<=st && b>=dr)
return s[pos];
else{
int m1, m2;
m1=m2=-INF;
if(a<=(st+dr)/2)
m1=search_max(st,(st+dr)/2,pos*2,a,b);
if(b>(st+dr)/2)
m2=search_max((st+dr)/2+1,dr,pos*2+1,a,b);
return max(m1,m2);
}
}
int main()
{
int n,q,i,x,c,a,b;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&q);
for(i=1; i<=n; i++){
scanf("%d",&x);
update(1,n,x,1,i);
}
for(i=1; i<=q; i++)
{
scanf("%d%d%d",&c,&a,&b);
if(c==0)
printf("%d\n",search_max(1,n,1,a,b));
else
update(1,n,b,1,a);
}
return 0;
}