#include<cstdio>
#include<algorithm>
using namespace std;
int arb[400010],x,i,j,Max,a,b,n,m,t;
void update(int st,int dr, int nr){
if(st==dr){
arb[nr]=x;
return;
}
int m=(st+dr)/2;
if(j<=m)update(st,m,2*nr);
else update(m+1,dr,2*nr+1);
arb[nr]=max(arb[2*nr],arb[2*nr+1]);
}
void query(int st,int dr,int nr){
if(a<=st&&dr<=b){
if(Max<arb[nr]) Max=arb[nr];
return;
}
int m=(st+dr)/2;
if(a<=m)query(st,m,2*nr);
if(m<b)query(m+1,dr,2*nr+1);
// }
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&x);
j=i;
update(1,n,1);
}
for(i=1;i<=m;i++){
scanf("%d%d%d",&t,&a,&b);
if(t==0){
Max=0;
query(1,n,1);
printf("%d\n",Max);
}
else{
j=a;
x=b;
update(1,n,1);
}
}
}