#include<cstdio>
#include<algorithm>
using namespace std;
int ai[500000],val,pos,sol;
int right_son(int nod)
{ return nod*2+1; }
int left_son(int nod)
{ return nod*2; }
void update(int nod,int st,int dr)
{
if(st==dr)
{
ai[nod]=val;
return;
}
int mij=(st+dr)/2;
if(pos<=mij)
update(left_son(nod),st,mij);
else update(right_son(nod),mij+1,dr);
ai[nod]=max(ai[left_son(nod)],ai[right_son(nod)]);
}
void search(int nod,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
{
if(sol<ai[nod]) sol=ai[nod];
return;
}
int mij=(st+dr)/2;
if(a<=mij) search(left_son(nod),st,mij,a,b);
if(b>mij) search(right_son(nod),mij+1,dr,a,b);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,i,m,a,b,x;
scanf("%d %d\n",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
val=x;
pos=i;
update(1,1,n);
}
while(m)
{
scanf("%d %d %d\n",&x,&a,&b);
if(x==0)
{
sol=0;
search(1,1,n,a,b);
printf("%d\n",sol);
}
if(x==1)
{
pos=a;
val=b;
update(1,1,n);
}
m--;
}
return 0;
}