#include <bits/stdc++.h>
#define NM 400002
using namespace std;
int n, m, ai[NM];
void upd(int st, int dr, int node, int pos, int val)
{
if(st == dr)
{
ai[node] = val;
return;
}
int mid = (st + dr) / 2;
if(pos <= mid)
upd(st, mid, node * 2, pos, val);
else
upd(mid + 1, dr, node * 2 + 1, pos, val);
ai[node] = max(ai[node * 2], ai[node * 2 + 1]);
}
int qry(int st, int dr, int node, int qa, int qb)
{
if(st == dr)
return ai[node];
int mid = (st + dr) / 2;
int r1 = -1, r2 = -1;
if(qa <= mid)
r1 = qry(st, mid, node * 2, qa, qb);
if(qb >= mid + 1)
r2 = qry(mid + 1, dr, node * 2 + 1, qa, qb);
return max(r1, r2);
}
int main()
{
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
int e;
fin >> e;
upd(1, n, 1, i, e);
}
for(int i = 1; i <= m; i++)
{
int op;
fin >> op;
if(op == 0)
{
int a, b;
fin >> a >> b;
fout << qry(1, n, 1, a, b) << "\n";
}
if(op == 1)
{
int p, a;
fin >> p >> a;
upd(1, n, 1, p, a);
}
}
return 0;
}