#include <bits/stdc++.h>
#define DIM 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, aib[4 * DIM], ans;
void Update(int nod, int st, int dr, int val, int poz)
{
if(st == dr)
{
aib[nod] = val;
return ;
}
int mid = (st + dr) / 2;
if(poz <= mid)
Update(2 * nod, st, mid, val, poz);
else
Update(2 * nod + 1, mid + 1, dr, val, poz);
aib[nod] = max(aib[2 * nod], aib[2 * nod + 1]);
}
void Query(int nod, int st, int dr, int stQ, int drQ)
{
if(stQ <= st && dr <= drQ)
{
ans = max(ans, aib[nod]);
return;
}
int mid = (st + dr) / 2;
if(mid >= stQ)
Query(2 * nod, st, mid, stQ, drQ);
if(mid < drQ)
Query(2 * nod + 1, mid + 1, dr, stQ, drQ);
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
{
int x;
f >> x;
Update(1, 1, n, x, i);
}
for(; m; m--)
{
int ops, x, y;
f >> ops >> x >> y;
if(ops == 0)
{
ans = 0;
Query(1, 1, n, x, y);
g << ans << "\n";
}
else
Update(1, 1, n, y, x);
}
return 0;
}