#include <cstdio>
#include <algorithm>
#define nmax 100009
using namespace std;
int arb[4*nmax],v[nmax],n;
void update(int x,int val,int inc,int sf)
{
if(inc==sf)
{
arb[x]=val;
}
else
{
if(arb[x]<val)
arb[x]=val;
int med=(inc+sf)/2;
if(x<=med)
{
update(x*2,val,inc,med);
}
else
{
update(x*2+1,val,med+1,sf);
}
}
}
int query(int st,int dr,int inc,int sf)
{
if(st==dr)
return v[st];
int med=(inc+sf)/2;
if(st>med)
return query(st,dr,med+1,sf);
if(dr<=med)
return query(st,dr,inc,med);
return max(query(med+1,dr,med+1,sf),query(st,med,inc,med));
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i,m,op,x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
//update(i,v[i],1,n);
}
for(i=1;i<=m;++i)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d%d",&x,&y);
v[x]=y;
//update(x,y,1,n);
}
if(op==0)
{
scanf("%d%d",&x,&y);
printf("%d\n",query(x,y,1,n));
}
}
return 0;
}