#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int parinte[400001];
void cautam_interval(int nod, int inceput, int sfarsit, int pozitie, int numar)
{
if(inceput==sfarsit)
{
parinte[nod]=numar;
return;
}
int mijloc=(inceput+sfarsit)/2;
if(pozitie>mijloc)
cautam_interval(2*nod+1, mijloc+1, sfarsit, pozitie, numar);
if(pozitie<=mijloc)
cautam_interval(2*nod, inceput, mijloc, pozitie, numar);
parinte[nod]=max(parinte[2*nod], parinte[2*nod+1]);
}
int afisare_maxim(int nod, int inceput, int sfarsit, int inceput_interval,int sfarsit_interval)
{
if(inceput>=inceput_interval&&sfarsit<=sfarsit_interval)
return parinte[nod];
else
{
int mijloc=(inceput+sfarsit)/2, maxim=0;
if(inceput_interval<=mijloc)
maxim=max(maxim, afisare_maxim(2*nod, inceput, mijloc, inceput_interval, sfarsit_interval));
if(sfarsit_interval>mijloc)
maxim=max(maxim, afisare_maxim(2*nod+1, mijloc+1, sfarsit, inceput_interval, sfarsit_interval));
return maxim;
}
}
int main()
{
int n, m;
fin >> n >> m;
for(int i=1; i<=n; i++)
{
int auxiliar;
fin >> auxiliar;
cautam_interval(1, 1, n, i, auxiliar);
}
for(int i=1; i<=m; i++)
{
int inceput, sfarsit, cerinta;
fin >> cerinta >> inceput >> sfarsit;
if(cerinta==1)
cautam_interval(1, 1, n, inceput, sfarsit);
else
fout << afisare_maxim(1, 1, n, inceput, sfarsit) << '\n';
}
}