#include <stdio.h>
#define DIM 100005
int aib[3*DIM];
int n,m,maxn;
void update (int nod,int st,int dr,int poz,int nr);
void query (int nod,int st,int dr,int in,int sf);
int main ()
{
freopen ("arbint.in","r",stdin);
freopen ("arbint.out","w",stdout);
int i,nr,a,b;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
{
scanf ("%d",&nr);
update (1,1,n,i,nr);
}
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&nr,&a,&b);
if (nr==1)
update (1,1,n,a,b);
else
{
maxn=-1;
query (1,1,n,a,b);
printf ("%d\n",maxn);
}
}
return 0;
}
int maxim (int a,int b)
{
if (a>b)
return a;
return b;
}
void update (int nod,int st,int dr,int poz,int nr)
{
if (st==dr)
aib[nod]=nr;
else
{
int mij=(st+dr)/2;
if (poz<=mij)
update (2*nod,st,mij,poz,nr);
else
update (2*nod+1,mij+1,dr,poz,nr);
aib[nod]=maxim (aib[2*nod],aib[2*nod+1]);
}
}
void query (int nod,int st,int dr,int in,int sf)
{
if (st>=in && dr<=sf)
{
if (aib[nod]>maxn)
maxn=aib[nod];
}
else
{
int mij=(st+dr)/2;
if (in<=mij)
query (2*nod,st,mij,in,sf);
if (sf>mij)
query (2*nod+1,mij+1,dr,in,sf);
}
}