#include<stdio.h>
#define N 100001
long n,m,i,a[N],y,z,h[18*N],j,k,t;
int x;
long maximus(long x,long y)
{if(x<y)
return y;
return x;}
long maxim(long h[18*N],long nod,long st,long dr,long y,long z)
{long mij=(st+dr)/2,t1=0,t2=0;
if(y<=st&&dr<=z)
return h[nod];
if(y<=mij)
t1=maxim(h,2*nod,st,mij,y,z);
if(z>mij)
t2=maxim(h,2*nod+1,mij+1,dr,y,z);
return maximus(t1,t2);}
void add(long h[18*N],long nod,long x,long st,long dr,long y)
{long m=(st+dr)/2;
if(st==dr)
{h[nod]=y;
while(nod>1)
{nod/=2;
if(h[nod]>maximus(h[2*nod],h[2*nod+1]))
break;
h[nod]=maximus(h[2*nod],h[2*nod+1]);}
return;}
if(x<=m)
add(h,2*nod,x,st,m,y);
else
add(h,2*nod+1,x,m+1,dr,y);}
int main()
{freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld%ld\n",&n,&m);
for(i=1;i<=n;i++)
{scanf("%ld",&a[i]);
add(h,1,i,1,n,a[i]);}
for(i=1;i<=m;i++)
{scanf("%d%ld%ld\n",&x,&y,&z);
if(x==0)
printf("%ld\n",maxim(h,1,1,n,y,z));
else
add(h,1,y,1,n,z);}
fclose(stdin);
fclose(stdout);
return 0;}