#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int N, i, a, M, op, maxi, b;
vector <int> x;
void betesz (int bal, int jobb, int gyoker, int poz, int k)
{
if (bal == jobb)
{
x[gyoker] = k;
return;
}
int kozep = (bal + jobb) / 2;
if (poz <= kozep) betesz (bal, kozep, 2 * gyoker, poz, k);
else betesz (kozep + 1, jobb, 2 * gyoker + 1, poz, k);
x[gyoker] = max (x[2 * gyoker], x[2 * gyoker + 1]);
}
void leker (int bal, int jobb, int gyoker, int a, int b)
{
if (a <= bal && jobb <= b)
{
maxi = max (maxi, x[gyoker]);
return;
}
int kozep = (bal + jobb) / 2;
if (a <= kozep) leker (bal, kozep, 2 * gyoker, a, b);
if (b > kozep) leker (kozep + 1, jobb, 2 * gyoker + 1, a, b);
}
int main()
{
cin >> N >> M;
x.resize(4 * N + 1);
for (i = 1; i <= N; ++i)
{
cin >> a;
betesz (1, N, 1, i, a);
}
for (i = 1; i <= M; ++i)
{
cin >> op >> a >> b;
if(op == 0)
{
maxi = -1;
leker (1, N, 1, a, b);
cout << maxi << "\n";
}
else betesz (1, N, 1, a, b);
}
return 0;
}