#include <fstream>
#define DIM 100001
using namespace std;
int n, m, v[7 * DIM], x, y;
bool t;
void update(int k, int poz, int value, int left, int right)
{
if(left == right) v[k] = value;
else
{
int mid = (left + right) / 2;
if(poz <= mid) update(k * 2, poz, value, left, mid);
else update(k * 2 + 1, poz, value, mid + 1, right);
v[k] = max(v[k * 2], v[k * 2 + 1]);
}
}
int query(int k, int a, int b, int left, int right)
{
if(a <= left && b >= right) return v[k];
int mid = (left + right) / 2;
if(b <= mid) return query(k * 2, a, b, left, mid);
if(a > mid) return query(k * 2 + 1, a, b, mid + 1, right);
int ls = query(k * 2, a, mid, left, mid);
int rs = query(k * 2 + 1, mid + 1, b, mid + 1, right);
return max(ls, rs);
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> n >> m;
for(int i = 1; i <= n; ++i)
{
f >> x;
update(1, i, x, 1, n);
}
for(int i = 1; i <= m; ++i)
{
f >> t >> x >> y;
if(t == 1) update(1, x, y, 1, n);
else g << query(1, x, y, 1, n) << '\n';
}
f.close();
g.close();
return 0;
}