#include <cstdio>
#include <algorithm>
using namespace std;
int aint[100001];
int ans,n,m;
void update(int nod, int st, int dr, int poz, int val)
{
int med;
if(st == dr)
{
aint[nod] = val;
return;
}
med = (st + dr) / 2;
if(poz <= med)
update(2 * nod, st, med, poz, val);
else
update(2 * nod + 1, med + 1, dr, poz, val);
aint[nod] = max(aint [2 * nod], aint[2 * nod + 1]);
}
void query(int nod, int st, int dr, int x, int y)
{
int med;
if(x <= st && y>= dr)
{
ans = max(ans, aint[nod]);
return;
}
med = (st + dr) / 2;
if(x <= med)
query(2 * nod, st, med, x, y);
if(y > med)
query(2 * nod + 1, med + 1, dr, x, y);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d", &n, &m);
int val, op, a, b;
for(int i = 1; i <= n; i ++)
{
scanf("%d", &val);
update(1, 1, n, i, val);
}
for(int i = 1; i <= m; i ++)
{
scanf("%d", &op);
if(op == 0)
{
scanf("%d %d", &a, &b);
ans = 0;
query(1, 1, n, a, b);
printf("%d\n", ans);
}
else
{
scanf("%d %d", &a, &b);
update(1, 1, n, a, b);
}
}
return 0;
}