#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[100005 * 4];
void query(int cntIndex, int ql, int qr, int l, int r, int &ans)
{
if (ql <= l && r <= qr)
{
ans = max(ans, aint[cntIndex]);
return;
}
int mid = (l + r) / 2;
if (ql <= mid)
{
query(cntIndex * 2, ql, qr, l, mid, ans);
}
if (mid < qr)
{
query(cntIndex * 2 + 1, ql, qr, mid + 1, r, ans);
}
}
void update(int cntIndex, int l, int r, int pos, int val)
{
if (l == r)
{
aint[cntIndex] = val;
return;
}
int mid = (l + r) / 2;
if (pos <= mid)
{
update(cntIndex * 2, l, mid, pos, val);
}
else
{
update(cntIndex * 2 + 1, mid + 1, r, pos, val);
}
aint[cntIndex] = max(aint[cntIndex * 2], aint[cntIndex * 2 + 1]);
}
int main()
{
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
update(1, 1, n, i, x);
}
for (int i = 1; i <= m; i++)
{
int c, a, b;
fin >> c >> a >> b;
if (c == 0)
{
int ans = 0;
if (a > b)
{
swap(a, b);
}
query(1, a, b, 1, n, ans);
fout << ans << '\n';
}
if (c == 1)
{
update(1, 1, n, a, b);
}
}
return 0;
}