#include <cstdio>
#include <algorithm>
using namespace std;
int v[1 << 18 + 3];
int n, m;
int maxim;
void update(int pos, int st, int dr, int pv, int val)
{
if(st == dr)
v[pos] = val;
else
{
int mij = (st + dr) / 2;
if(pv <= mij)
update(2 * pos, st, mij, pv, val);
else update(2 * pos + 1, mij + 1, dr, pv, val);
}
}
void getmax(int pos, int st, int dr, int isd, int idd)
{
if(st == dr)
maxim = max(maxim, v[pos]);
else
{
int mij = (st + dr) / 2;
if(isd <= mij)
getmax(2 * pos, st, mij, isd, idd);
if(mij + 1 <= idd)
getmax(2 * pos + 1, mij + 1, dr, isd, idd);
}
}
int main()
{
int i, j, a, b, c;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++)
{
scanf("%d", &a);
update(1, 1, n, i, a);
}
for(i = 1; i <= m; i++)
{
scanf("%d%d%d", &c, &a, &b);
if(c == 0)
{
maxim = -1;
getmax(1, 1, n, a, b);
printf("%d\n", maxim);
}
else
{
update(1, 1, n, a, b);
}
}
return 0;
}