#include <cstdio>
#define max(a,b) a>b?a:b
int a[300000];
void update(int nod,int li,int lf,int &ind,int &val)
{
if(li==lf)
a[nod]=val;
else
{
int m=(li+lf)/2;
if(ind<=m)update(2*nod,li,m,ind,val);
else update(2*nod+1,m+1,lf,ind,val);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
}
int vmax(int nod,int li,int lf,int &s,int &d)
{
if(d<li||s>lf)return 0;
if(s<=li&&lf<=d)return a[nod];
int m=(li+lf)/2;
return max(vmax(2*nod,li,m,s,d),vmax(2*nod+1,m+1,lf,s,d));
}
int main()
{
FILE *f=fopen("arbint.in","r");
int n,m,i,x;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
update(1,1,n,i,x);
}
int op,ind,val;
FILE *g=fopen("arbint.out","w");
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&op,&ind,&val);
if(op==1)update(1,1,n,ind,val);
else
fprintf(g,"%d\n",vmax(1,1,n,ind,val));
}
return 0;
}