#include <cstdio>
#include <algorithm>
using namespace std;
int v[100005],ai[500005],rez;
/*void upd(int x)
{
int st=0,dr=n-1,poz=1;
while(st!=dr)
{
mijl=(st+dr)/2;
while(mijl>=x)
{
poz=2*poz;
dr=mijl;
mijl=(st+dr)/2;
}
while(mijl<x)
{
poz=2*poz+1;
st=mijl+1;
mijl=(st+dr)/2;
}
}
}*/
void init(int poz, int st, int dr)
{
if(st==dr)
ai[poz]=v[st];
else
{
init(2*poz+1,(st+dr)/2+1,dr);
init(2*poz,st,(st+dr)/2);
ai[poz]=max(ai[poz*2],ai[poz*2+1]);
}
}
void update(int poz, int st, int dr, int loc, int x)
{
if(st==dr)
ai[poz]=x;
else
{
int mijl=(st+dr)/2;
if(loc<=mijl)
update(2*poz,st,mijl,loc,x);
else
update(2*poz+1,mijl+1,dr,loc,x);
}
ai[poz]=max(ai[2*poz],ai[2*poz+1]);
}
void maxint(int poz, int st, int dr, int a, int b)
{
if(st>=a&&dr<=b)
rez=max(rez,ai[poz]);
else
{
int mijl=(st+dr)/2;
if(b>mijl)
maxint(2*poz+1,mijl+1,dr,a,b);
if(a<=mijl)
maxint(2*poz,st,mijl,a,b);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m,p,a,b;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
init(1,1,n);
for(int i=1;i<=m;++i)
{
scanf("%d %d %d",&p,&a,&b);
if(p==0)
{
rez=0;
maxint(1,1,n,a,b);
printf("%d\n",rez);
}
else
update(1,1,n,a,b);
}
return 0;
}