#include<stdio.h>
#define N 100005
FILE *f=fopen("arbint.in","r"), *g=fopen("arbint.out","w");
int a[N*4+N/2], start, final, pos, val, maxim,n,m, test;
int max(int a, int b)
{
if(a>b)
return a;
else return b;
}
void update(int nod, int left, int right)
{
if(left == right)
{
a[nod]= val;
return;
}
else
{
int div=left+(right-left)/2;
if( pos<= div )
update(2*nod, left, div);
else update(2*nod+1, div+1, right);
}
a[nod]= max( a[nod*2], a[nod*2+1]);
}
void caut(int nod, int left, int right)
{
if( start<= left && right<= final)
{
if(maxim < a[nod])
maxim=a[nod];
return;
}
int div= left + (right-left)/2;
if(start<=div)
caut(2*nod, left, div);
if(div<final)
caut(2*nod+1, div+1, right);
}
int main()
{
fscanf(f,"%d %d", &n, &m);
for(int i=1; i<=n;i++)
{
fscanf(f,"%d", &val);
pos=i;
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
fscanf(f, "%d %d %d", &test, &start, &final);
if(test==0)
{
maxim=-1;
caut(1, 1, n);
fprintf(g,"%d\n", maxim);
}
else
{
pos=start, val=final;
update(1,1,n);
}
}
return 0;
}