#include<cstdio>
using namespace std;
int maxarb[400070];
int mx,poz,val,start,final;
int maxim(int a, int b)
{
if(a>b)
return a;
return b;
}
void update(int nod, int st, int dr)
{
int mij;
if(st==dr)
{
maxarb[nod]=val;
return;
}
mij=(st+dr)/2;
if(poz<=mij)
update(2*nod,st,mij);
else
update(2*nod+1,mij+1,dr);
maxarb[nod]=maxim(maxarb[2*nod],maxarb[2*nod+1]);
}
void query(int nod, int st, int dr)
{
int mij,v1=-1,v2=-1;
if((st>=start)&&(dr<=final))
{
if(maxarb[nod]>mx)
mx=maxarb[nod];
return;
}
mij=(st+dr)/2;
if(start<=mij)
query(2*nod,st,mij);
if(final>mij)
query(2*nod+1,mij+1,dr);
}
int main()
{
int n,m,i,x,a,b;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d\n",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d ",&x);
poz=i;val=x;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
scanf("%d %d %d\n",&x,&a,&b);
if(x==0)
{
mx=-1;
start=a;final=b;
query(1,1,n);
printf("%d\n",mx);
}
else
{
poz=a;
val=b;
update(1,1,n);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}