#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N, M, A, B, maxim;
int ARB[1 << 17];
void Update(int nod, int lt, int rt, int pos, int val)
{
if (lt == rt)
{
ARB[nod] = val;
return;
}
int mid = (lt + rt) >> 1;
if (pos <= mid)
Update(nod * 2, lt, mid, pos, val);
else
Update(nod * 2 + 1, mid + 1, rt, pos, val);
ARB[nod] = max(ARB[nod * 2], ARB[nod * 2 + 1]);
}
void Question(int nod, int lt, int rt, int start, int finish)
{
if (start <= lt && rt <= finish)
{
if (ARB[nod] > maxim)
maxim = ARB[nod];
return;
}
if (lt == rt)
return;
int mid = (lt + rt) >> 1;
if (start <= mid)
Question(nod * 2, lt, mid, start, finish);
if (mid < finish)
Question(nod * 2 + 1, mid + 1, rt, start, finish);
}
int main()
{
fin >> N >> M;
for (int i = 1, nod; i <= N; ++i)
{
fin >> nod;
Update(1, 1, N, i, nod);
}
for (int i = 1, type; i <= M; ++i)
{
fin >> type >> A >> B;
if (type == 0)
{
maxim = 0;
Question(1, 1, N, A, B);
fout << maxim << '\n';
}
else
Update(1, 1, N, A, B);
}
fin.close();
fout.close();
return 0;
}