#include <cstdio>
#define infile "arbint.in"
#define outfile "arbint.out"
#define MaxN 100005
#define fs(x) (x)*2
#define fd(x) (x)*2+1
int arb[4*MaxN];
int N,M,op,i,a,b;
int val,pos,max;
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
void Update(int nod,int st,int dr)
{
if(st==dr)
{
arb[nod]=val;
return;
}
int m=(st+dr)/2;
if(pos<=m)
Update(fs(nod),st,m);
else
Update(fd(nod),m+1,dr);
arb[nod]=maxim(arb[fs(nod)],arb[fd(nod)]);
}
void Query(int nod,int st,int dr)
{
if(st>=a && dr<=b)
{
if(arb[nod]>max) max=arb[nod];
return;
}
int m=(st+dr)/2;
if(a<=m)
Query(fs(nod),st,m);
if(m<b)
Query(fd(nod),m+1,dr);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++)
{
scanf("%d",&val);
pos=i;
Update(1,1,N);
}
for(i=1;i<=M;i++)
{
scanf("%d%d%d",&op,&a,&b);
if(!op)
{
max=-1;
Query(1,1,N);
printf("%d\n",max);
}
else
{
pos=a; val=b;
Update(1,1,N);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}