#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)
{
int r1 = 0, r2 = 0;
if(qa <= st && qb >= dr)
return ai[node];
int mid = (st + dr) / 2;
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 v;
fin >> v;
upd(1, n, 1, i, v);
}
for(int i = 1; i <= m; i++)
{
int o;
fin >> o;
if(o == 1)
{
int p, v;
fin >> p >> v;
upd(1, n, 1, p, v);
}
else
{
int a, b;
fin >> a >> b;
fout << qry(1, n, 1, a, b) << "\n";
}
}
return 0;
}