#include<stdio.h>
#include<string.h>
FILE*fin=fopen("arbint.in","r");
FILE*fout=fopen("arbint.out","w");
#define max(a,b)((a)>(b)?(a):(b))
#define nm 400000
int a,b,t[nm];
void update(int nod,int l,int r)
{
int mid,v1=0,v2=0;
if(l==r) t[nod]=b;
else
{
mid=(l+r)/2;
if(a<=mid)
update(2*nod,l,mid);
else
update(2*nod+1,mid+1,r);
t[nod]=max(t[2*nod],t[2*nod+1]);
}
}
int query(int nod,int l,int r)
{
int mid=(l+r)/2,q=0;
if(a<=l&&r<=b) return t[nod];
if(a<=mid) q=max(q,query(2*nod,l,mid));
if(b>=mid+1) q=max(q,query(2*nod+1,mid+1,r));
return q;
}
int main()
{
int i,x,n,m,q;
fscanf(fin,"%d%d",&n,&m);
memset(t,0,sizeof(t));
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&x);
a=i;b=x;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&q,&a,&b);
if(q) update(1,1,n);
else fprintf(fout,"%d\n",query(1,1,n));
}
fclose(fin);
fclose(fout);
return 0;
}