#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 4000100
int MAXIM(int a,int b)
{
if (a>b) return a;
else return b;
}
int st,dr,value,arb[MAXN];
void updateArb(int l,int r,int index)
{
if (l==r) arb[index]=value;
else
{
int m=(l+r)>>1;
if (st<=m) updateArb(l,m,index<<1);
if (dr>m) updateArb(m+1,r,(index<<1)|1);
arb[index]=MAXIM(arb[index<<1],arb[(index<<1)|1]);
}
}
int queryArb(int l,int r,int index)
{
if ((st<=l) && (dr>=r)) return arb[index];
else
{
int m=(l+r)>>1,q1=0,q2=0;
if (st<=m) q1=queryArb(l,m,index<<1);
if (dr>m) q2=queryArb(m+1,r,(index<<1)|1);
return MAXIM(q1,q2);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i,n,m,cmd;
scanf("%d %d",&n,&m);
for (i=0;i<n;i++)
{
scanf("%d",&value);
st=i+1;dr=i+1;
updateArb(1,n,1);
}
for (i=0;i<m;i++)
{
scanf("%d",&cmd);
if (cmd==0)
{
scanf("%d %d",&st,&dr);
printf("%d\n",queryArb(1,n,1));
}
else
{
scanf("%d %d",&st,&value);
dr=st;
updateArb(1,n,1);
}
}
fclose(stdout);
return 0;
}