#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define Nmax 1001
#define Mmax 1001
typedef struct arbint
{
long e,v;
long max,maxi;
struct arbint *k,*n;
} arbint;
long A[Nmax];
arbint l;
long n,m,c,a,b,i,val,vali;
long MAX(arbint *a, arbint *b, long *m)
{
if (a->max > b->max)
{
*m = a->maxi;
return a->max;
}
else
{
*m = b->maxi;
return b->max;
}
}
void initfa(arbint *l, long e, long v)
{
l->e = e;
l->v = v;
if (e!=v)
{
l->n = new arbint;
l->k = new arbint;
initfa(l->k,e,(e+v)/2);
initfa(l->n,(e+v)/2+1, v);
l->max = MAX(l->k,l->n,&l->maxi);
}
else
{
l->k = NULL;
l->n = NULL;
l->max = A[e];
l->maxi = e;
}
}
long maxkeres(arbint *l, long a, long b, long *c)
{
long e,k,v,m1,m2,mm1,mm2;
e = l->e;
v = l->v;
k = (e+v)/2;
if ((a<e)||(b>v) || (b<a))
return LONG_MIN;
else if ((a>k)&&(b>k))
return maxkeres(l->n,a,b,c);
else if ((a<k) && (b<=k))
return maxkeres(l->k,a,b,c);
else if ((a==e)&&(b==v))
{
*c = l->maxi;
return l->max;
}
else if ((a<=k) && (b>k))
{
m1 = maxkeres(l->k,a,k,&mm1);
m2 = maxkeres(l->n,k+1,b,&mm2);
if (m1>m2)
{
*c = mm1;
return m1;
}
else
{
*c = mm2;
return m2;
}
}
return 0;
}
void szabadit(arbint *l)
{
if (l->k!=NULL)
{
szabadit(l->k);
delete(l->k);
}
if (l->n!=NULL)
{
szabadit(l->n);
delete(l->n);
}
return;
}
void igazit(arbint *l, long c, long d)
{
long m1,m2,m,mm,mm1,mm2,e,v,k;
m1 = maxkeres(l,l->e,c-1,&mm1);
m2 = maxkeres(l,c+1,l->v,&mm2);
if (m1>m2)
{
m = m1;
mm = mm1;
}
else
{
m = m2;
mm = mm2;
}
if (m>d)
{
l->max = m;
l->maxi = mm;
}
else
{
l->max = d;
l->maxi = c;
}
e = l->e;
v = l->v;
k = (e+v)/2;
if (e!=v)
{
if (c>k)
{
igazit(l->n,c,d);
}
else
{
igazit(l->k,c,d);
}
}
return;
}
void modif(arbint *l,long c,long d)
{
long m,m1,m2,mm,mm1,mm2,e,v,k;
A[c] = d;
m1 = maxkeres(l,l->e,c-1,&mm1);
m2 = maxkeres(l,c+1,l->v,&mm2);
if (m1>m2)
{
m = m1;
mm = mm1;
}
else
{
m = m2;
mm = mm2;
}
if (d > m)
{
l->max = d;
l->maxi = c;
}
else
{
l->max = m;
l->maxi = mm;
}
e = l->e;
v = l->v;
k = (e+v)/2;
if (c>k)
{
igazit(l->n, c, d);
}
else
{
igazit(l->k, c, d);
}
return;
}
int main()
{
FILE *g = fopen("arbint.out","w");
freopen("arbint.in","r",stdin);
scanf("%ld %ld",&n,&m);
for (i = 1;i<=n;i++)
scanf("%ld",&A[i]);
initfa(&l,1,n);
for (i = 1;i<=m;i++)
{
scanf("%ld %ld %ld",&c,&a,&b);
if (!c)
{
val = maxkeres(&l,a,b,&vali);
fprintf(g,"%ld\n", val);
}
else
{
modif(&l,a,b);
}
}
szabadit(&l);
fclose(g);
return 0;
}