#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int Arb[400010],V[100010];
void ArbInt(int Ind,int St,int Dr)
{
if (St == Dr)
Arb[Ind] = V[St];
else
{
int Mij = (St+Dr)/2;
ArbInt(Ind*2,St,Mij);
ArbInt(Ind*2+1,Mij+1,Dr);
if (Arb[Ind*2] > Arb[Ind*2+1])
Arb[Ind] = Arb[Ind*2];
else Arb[Ind] = Arb[Ind*2+1];
}
}
int Maxi(int Ind,int St,int Dr,int MargInf,int MargSup)
{
if (MargInf > MargSup)
return -1;
if (MargInf == St && MargSup == Dr)
return Arb[Ind];
int Mij = (St+Dr)/2;
return max(Maxi(Ind*2,St,Mij,MargInf,min(MargSup,Mij)),Maxi(Ind*2+1,Mij+1,Dr,max(Mij+1,MargInf),MargSup));
}
void Schimb(int Ind,int St,int Dr,int Poz,int Val)
{
if (St == Dr)
Arb[Ind] = Val;
else
{
int Mij = (St+Dr)/2;
if (Poz <= Mij)
Schimb(Ind*2,St,Mij,Poz,Val);
else
Schimb(Ind*2+1,Mij+1,Dr,Poz,Val);
Arb[Ind] = max(Arb[Ind*2],Arb[Ind*2+1]);
}
}
int main()
{
int n,m,x,a,b;
fin>>n>>m;
for (int i=1;i<=n;i++)
fin>>V[i];
ArbInt(1,1,n);
for (int i=0;i<m;i++)
{
fin>>x>>a>>b;
if (x==0)
fout<<Maxi(1,1,n,a,b)<<"\n";
else
Schimb(1,1,n,a,b);
}
fin.close();
fout.close();
return 0;
}