#include <stdio.h>
int v[500000], arbore[100000];
int stanga, dreapta, poz;
void construire_arbore(int st, int dr, int pozitie)
{
if (st == dr)
arbore[pozitie] = v[st];
else{
int mijloc = (st + dr) / 2;
//adaug fiul stang
construire_arbore(st, mijloc, 2 * pozitie);
//adaug fiul drept
construire_arbore(mijloc + 1, dr, 2 * pozitie + 1);
if(arbore[2 * pozitie] > arbore[2 * pozitie + 1])
arbore[pozitie] = arbore[2 * pozitie];
else arbore[pozitie] = arbore[2 * pozitie + 1];
}
}
void restabilire_arbore(int st, int dr, int pozitie)
{
//daca am ajuns pe cazul de baza, elementul de pe pozitia respectiva ia valoarea elementului de pe pozitia st din vectorul initial
if(st == dr)
arbore[pozitie] = v[st];
else{
int mijloc = (st + dr) / 2;
if(poz <= mijloc)
//ma mut in partea din stanga a subarborelui
restabilire_arbore(st, mijloc, 2 * pozitie);
//ma mut in partea din dreapta a subarborelui
else restabilire_arbore(mijloc + 1, dr, 2 * pozitie + 1);
if(arbore[2 * pozitie] > arbore[2 * pozitie + 1])
arbore[pozitie] = arbore[2 * pozitie];
else arbore[pozitie] = arbore[2 * pozitie + 1];
}
}
int interogare(int st, int dr, int pozitie)
{
//atata timp cat nu am depasit capetele
if(stanga <= st && dr <= dreapta)
return arbore[pozitie];
else
{
int maxi_st = -9999999;
int maxi_dr = -9999999;
int mijloc = (st + dr) / 2;
if(stanga <= mijloc)
//maximul se aflsa in partea stanga a subarborelui
maxi_st = interogare(st, mijloc, 2 * pozitie);
if(mijloc + 1 <= dreapta)
//maximul se afla in partea dreapta a subarborelui
maxi_dr = interogare(mijloc + 1, dr, 2 * pozitie + 1);
if(maxi_st > maxi_dr)
return maxi_st;
else return maxi_dr;
}
}
int main()
{
FILE *f = fopen("arbint.in", "r+");
FILE *g = fopen("arbint.out", "w+");
int n, m, cod, a, b;
fscanf(f, "%d%d", &n, &m);
for(int i = 1; i <= n; i++)
fscanf(f, "%d", &v[i]);
construire_arbore(1, n, 1);
for(int i = 1; i<= m; i++)
{
fscanf(f, "%d%d%d", &cod, &a, &b);
if(cod == 0)
{
stanga = a;
dreapta = b;
int rez = interogare(1, n, 1);
fprintf(g, "%d\n", rez);
}
else
{
v[a] = b;
poz = a;
restabilire_arbore(1, n, 1);
}
}
return 0;
}