#include <stdio.h>
#include <stdlib.h>
int a[10000],n,m,A,B,poz,val,maxim;
int max(int a,int b)
{
if ( a>b ) return a;
else return b;
}
void update(int nod,int i,int j)
{
int p=(i+j)/2;
if (i==j)
{
a[nod]=val;
return;
}
if (poz<=p) update(nod*2,i,p);
else update(nod*2+1,p+1,j);
a[nod]=max(a[2*nod],2*nod+1);
}
void query(int nod,int i,int j)
{
int p=(i+j)/2;
if (A<=i && j<=B)
{
if (maxim<a[nod]) maxim=a[nod];
return;
}
if (A<=p) query(nod*2,i,p);
if (p<B) query(nod*2+1,p,j);
}
int main()
{
int i,x;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%i%i",&n,&m);
for (i=1; i<=n; i++)
{
scanf("%i",&val);
poz=i;
update(1,1,n);
}
for (i=1; i<=m; i++)
{
scanf("%i%i%i",&x,&A,&B);
if (x==0)
{
maxim=0;
query(1,1,n);
printf("%i\n",maxim);
}
else
{
poz=A; val=B;
update(1,1,n);
}
}
return 0;
}