#include<stdio.h>
int graf[280000],v[100001],n,m,i,x,y,op;
void construire(int st,int dr,int poz)
{
if(st==dr)
{
v[st]=poz;
return;
}
int mij=(st+dr)/2;
construire(st,mij,2*poz);
construire(mij+1,dr,(2*poz)+1);
}
int max(int a,int b)
{
if(a>b) return a;
return b;
}
void inserare(int nr,int poz)
{
graf[v[poz]]=nr;
for(int i=v[poz]/2;i>0;i/=2)
graf[i]=max(graf[2*i],graf[(2*i)+1]);
}
int max_graf(int st,int dr, int poz)
{
if(st>=x&&dr<=y)
return graf[poz];
else if(dr<x||st>y) return 0;
int mij=(st+dr)/2;
//return max(max_graf(st,mij,2*poz),max_garf(mij+1,dr,2*poz+1));
if(max_graf(st,mij,poz*2)<max_graf(mij+1,dr,poz*2+1)) return max_graf(mij+1,dr,poz*2+1);
else return max_graf(st,mij,poz*2);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m);
construire(1,n,1);
for(i=1;i<=n;++i)
{
scanf("%d",&x);
inserare(x,i);
}
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&op,&x,&y);
if(op==0)
printf("%d\n",max_graf(1,n,1));
else inserare(y,x);
}
return 0;
}