#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],w[262144];
void upd(int nod,int j,int val,int st,int dr)
{
if(dr==st){w[nod]=val;return;}
int mi=(st+dr)/2;
if(j<=mi)upd(nod*2,j,val,st,mi);
else upd(nod*2+1,j,val,mi+1,dr);
w[nod]=w[nod*2];
if(w[nod]<w[nod*2+1])w[nod]=w[nod*2+1];
}
int query(int nod,int a,int b,int st,int dr)
{
if(a<=st&&b>=dr)return w[nod];
int mi=(st+dr)/2,c=-1,d=-1;
if(b>mi)c=query(nod*2+1,a,b,mi+1,dr);
if(a<=mi)d=query(nod*2,a,b,st,mi);
if(c<d)return d;
return c;
}
int main()
{freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int n,m,i,j,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{scanf("%d",&j);
upd(1,i,j,1,n);
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&j,&a,&b);
if(j==0)
{
printf("%d\n",query(1,a,b,1,n));
}
else if(j==1)
{
upd(1,a,b,1,n);
}
}
return 0;
}