#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1001000],i,j,m,x,y,z,val,p,rez,n;
int actual(int st,int dr,int i)
{
if(st==dr) {
a[i]=val;
return 0;
}
int mij=(st+dr)/2;
if(p <= mij) actual(st ,mij ,i*2);
else actual( mij+1, dr, i*2+1);
a[i] = max(a[i*2] , a[i*2+1]);
return 0;
}
int Search(int st,int dr,int i)
{ if(x <= st && dr <= y) {
rez=max(rez,a[i]);
return 0;
}
int mij = (st+dr)/2;
if(x <= mij) Search(st ,mij ,i*2);
if(y > mij) Search(mij+1 ,dr ,i*2+1);
return 0;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++) {
scanf("%d",&val);
p=i;
actual(1,n,1);
}
for(i=1;i<=m;i++) { scanf("%d %d %d",&z,&x,&y);
if(z) {
val = y;
p = x;
actual(1,n,1);
}
else { rez=0;
Search(1,n,1);
printf("%d\n",rez);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}