#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
int v[100001], arb[262200];
void Citire()
{
int i;
fin >> n >> m;
for(i = 1; i <= n; i++)
fin >> v[i];
}
void Initializare(int id, int st, int dr)
{
if(st == dr)
{
arb[id] = v[st];
return;
}
int mij = (st+dr) / 2;
Initializare(2*id, st, mij);
Initializare(2*id+1, mij+1, dr);
arb[id] = max(arb[2*id], arb[2*id+1]);
}
void Actualizare(int id, int st, int dr, int poz)
{
if(st == dr && st == poz)
{
arb[id] = v[st];
return;
}
int mij = (st+dr) / 2;
if(poz <= mij)
Actualizare(2*id, st, mij, poz);
else
Actualizare(2*id+1, mij+1, dr, poz);
arb[id] = max(arb[2*id], arb[2*id+1]);
}
int Interogare(int id, int st, int dr, int a, int b)
{
if(a <= st && b >= dr)
return arb[id];
int mij = (st+dr) / 2;
int max1 = -1, max2 = -1;
if(a <= mij)
max1 = Interogare(2*id, st, mij, a, b);
if(b > mij)
max2 = Interogare(2*id+1, mij+1, dr, a, b);
return max(max1, max2);
}
int main()
{
int i, a, b, op;
Citire();
Initializare(1, 1, n);
for(i = 1; i <= m; i++)
{
fin >> op >> a >> b;
if(op == 1)
{
v[a] = b;
Actualizare(1, 1, n, a);
}
else
fout << Interogare(1, 1, n, a, b) << "\n";
}
return 0;
}