#include<cstdio>
#include<algorithm>
using namespace std;
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
int a[300001];int n,m,maxx;
void update(int i,int left,int right,int x,int poz)
{
if(left!=right)
{
int m=(left+right)/2;
if(poz<=m)
update(2*i,left,m,x,poz);
else
update(2*i+1,m+1,right,x,poz);
a[i]=max(a[2*i],a[2*i+1]);
}
else
a[i]=x;
}
void maxim(int i,int left,int right,int l,int r)
{
if(left==l&&right==r)
{
maxx=max(maxx,a[i]);
return ;
}
int m=(left+right)/2;
if(r<=m)
maxim(2*i,left,m,l,r);
else
if(l>m)
maxim(2*i+1,m+1,right,l,r);
else{
maxim(2*i,left,m,l,m);
maxim(2*i+1,m+1,right,m+1,r);
}
}
int main()
{
int y;
int i,cer,x;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%ld",&x);
update(1,1,n,x,i);
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%ld",&cer,&x,&y);
if(cer==1)
update(1,1,n,y,x);
else
{
maxx=-1;
maxim(1,1,n,x,y);
fprintf(g,"%ld\n",maxx);
}
}
return 0;
}