#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, a[NMAX];
int arb[4*NMAX];
int cer, aul, bul;
void init(int st, int dr, int pozInSir)
{
if(st == dr)
{
arb[pozInSir]=a[st];
return;
}
int mij=(st+dr)/2;
init(st, mij, pozInSir*2);
init(mij+1, dr, pozInSir*2+1);
arb[pozInSir]=max(arb[pozInSir*2], arb[pozInSir*2+1]);
}
void update(int st, int dr, int poz, int x, int pozInSir)
{
if(st == dr)
{
arb[pozInSir]=x;
return;
}
int mij=(st+dr)/2;
if(poz <= mij)
update(st, mij, poz, x, pozInSir*2);
else
update(mij+1, dr, poz, x, pozInSir*2+1);
arb[pozInSir]=max(arb[pozInSir*2], arb[pozInSir*2+1]);
}
int det(int st, int dr, int ini, int inj, int pozInSir)
{
if(dr<st)
return 0;
if(ini<=st && inj>=dr)
return arb[pozInSir];
int mij=(st+dr)/2;
int valst=0, valdr=0;
if(ini > mij)
valdr=det(mij+1, dr, ini, inj, pozInSir*2+1);
else if(inj <= mij)
valst=det(st, mij, ini, inj, pozInSir*2);
else{
valst=det(st, mij, ini, inj, pozInSir*2);
valdr=det(mij+1, dr, ini, inj, pozInSir*2+1);
}
return max(valst, valdr);
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
f>>a[i];
}
init(1, n, 1);
for(int i=1; i<=m; i++)
{
f>>cer>>aul>>bul;
if(cer == 0)
{
g<<det(1, n, aul, bul, 1)<<'\n';
continue;
}
update(1, n, aul, bul, 1);
}
return 0;
}