#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;
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
if(left==poz)
a[i]=x;
}
int maxim(int i,int left,int right,int l,int r)
{
if(left==l&&right==r)return a[i];
else
{
int m=(left+right)/2;
if(r<=m)
return maxim(2*i,left,m,l,r);
if(l>m)
return maxim(2*i+1,m+1,right,l,r);
return max(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 fprintf(g,"%ld\n",maxim(1,1,n,x,y));
}
return 0;
}