#include <stdio.h>
#define nmax 100005
int n, m, x, y, a [270000], init [nmax];
inline int max (int a, int b)
{
if (a > b)
return a;
return b;
}
void cnstr (int st, int dr, int poz)
{
if (st == dr)
{
init [st]=poz;
return;
}
int mij=(st+dr)/2;
cnstr (st, mij, poz*2);
cnstr (mij+1, dr, (poz*2)+1);
}
void update (int poz, int val)
{
int k=init [poz];
a [k]=val;
for (k/=2; k; k/=2)
a [k]=max (a [k*2], a [(k*2)+1]);
}
int caut (int st, int dr, int poz)
{
if (x <= st && dr <= y)
return a [poz];
if (x > dr || st > y)
return 0;
int mij=(st+dr)/2;
return max (caut (st, mij, poz*2), caut (mij+1, dr, (poz*2)+1));
}
void scan ()
{
int i;
scanf ("%d%d", &n, &m);
cnstr (1, n, 1);
for (i=1; i <= n; ++i)
{
scanf ("%d", &x);
update (i, x);
}
}
int main ()
{
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
scan ();
int i, tip;
for (i=1; i <= m; ++i)
{
scanf ("%d%d%d", &tip, &x, &y);
if (tip == 0)
printf ("%d\n", caut (1, n, 1));
else
update (x, y);
}
return 0;
}