#include<bits/stdc++.h>
#define int long long
using namespace std;
const int NMAX = 1e5 + 5;
int n, m, v[NMAX], arbint[4 * NMAX];
void update(int val, int poz, int arbst, int arbdr, int arbpoz)
{
if(arbst == arbdr)
{
arbint[arbpoz] = val;
return;
}
int mij = (arbst + arbdr) / 2;
if(poz > mij)
update(val, poz, mij + 1, arbdr, arbpoz * 2 + 1);
else
update(val, poz, arbst, mij, arbpoz * 2);
arbint[arbpoz] = max(arbint[arbpoz * 2], arbint[arbpoz * 2 + 1]);
}
int query(int st, int dr, int arbst, int arbdr, int arbpoz)
{
if(arbst > dr || arbdr < st)
return 0;
if(arbst >= st && arbdr <= dr)
{
return arbint[arbpoz];
}
int mij = (arbst + arbdr) / 2;
return max(query(st, dr, arbst, mij, arbpoz * 2), query(st, dr, mij + 1, arbdr, arbpoz * 2 + 1));
}
int32_t main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
cin >> v[i];
update(v[i], i, 1, n, 1);
}
int c, a, b;
for(int i = 1; i <= m; i++)
{
cin >> c >> a >> b;
if(c == 0)
cout << query(a, b, 1, n, 1) << "\n";
else
update(b, a, 1, n, 1);
}
}