#include <fstream>
#define DIM 100003
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, ARB[4*DIM];
void Update (int nod, int st, int dr, int poz, int val)
{
if (st == dr) ARB[nod] = val;
else
{
int mij = (st + dr) >> 1;
if (poz <= mij)
Update(nod << 1, st, mij, poz, val);
else Update (1 + (nod << 1), mij + 1, dr, poz, val);
ARB[nod] = max(ARB[1+ (nod << 1)], ARB[nod << 1]);
}
}
void query (int nod, int st, int dr, int x, int y, int &sol)
{
if (x <= st and dr <= y) sol = max (sol, ARB[nod]);
else
{
int mij = (st + dr) >> 1;
if (x <= mij) query(nod << 1, st, mij, x, y, sol);
if (mij < y) query(1 + (nod << 1) , mij + 1, dr, x, y, sol);
}
}
int main()
{
in >> n >> m;
for (int x, i = 1; i <= n; i++)
{
in >> x;
Update(1, 1, n, i, x);
}
for (int t, x, y; m; --m)
{
in >> t >> x >> y;
if (t) Update(1, 1, n, x, y);
else {int sol = 0; query(1, 1, n, x, y, sol); out << sol << '\n';}
}
out.close();
return 0;
}