#include<stdio.h>
int n,ai[100100],v[100100],a,b,i,x;
void update(int nod, int st, int dr)
{
if(st==dr)
ai[nod]=v[i];
else
{
int m=(st+dr)>>1,ls=nod<<1,rs=1+ls;
if(i<=m)
update(ls,st,m);
else
update(rs,m+1,dr);
if(ai[rs]<ai[ls])
ai[nod]=ai[ls];
else
ai[nod]=ai[rs];
}
}
void query(int nod, int st, int dr)
{
if(a<=st&&dr<=b)
{
if(x<ai[nod])
x=ai[nod];
}
else
{
int m=(st+dr)>>1,ls=nod<<1,rs=1+ls;
if(a<=m)
query(ls,st,m);
if(m<b)
query(rs,m+1,dr);
}
}
int main()
{
int m,op;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
update(1,1,n);
}
while(m--)
{
scanf("%d",&op);
if(op)
{
scanf("%d %d",&i,&op);
v[i]=op;
update(1,1,n);
}
else
{
scanf("%d %d",&a,&b);
x=-1;
query(1,1,n);
printf("%d\n",x);
}
}
return 0;
}