#include <bits/stdc++.h>
using namespace std;
long long n,m,aint[400007],in,sf,in2,sf2,nod,val,poz,a,b;
ifstream f("arbint.in");
ofstream g("arbint.out");
///-------------------------------------------
void update(int in, int sf, int nod, int val, int poz)
{
if(in==sf)
{
aint[nod]=val;
return;
}
int mij=(in+sf)/2;
if(poz<=mij)
{
update(in, mij, 2*nod, val, poz);
}
else update(mij+1, sf, 2*nod+1, val, poz);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
///-------------------------------------------
int cauta(int in, int sf, int in2, int sf2, int nod)
{
if(in==in2 && sf==sf2)
{
return aint[nod];
}
int mij=(in+sf)/2;
if(mij<in2)
{
return cauta(mij+1,sf,in2, sf2, 2*nod+1);
}
if(mij>=sf2)
{
return cauta(in,mij,in2,sf2,2*nod);
}
if(mij>=in2 && mij<sf2)
{
return max(cauta(mij+1,sf,mij+1, sf2, 2*nod+1), cauta(in,mij,in2,mij,2*nod));
}
}
///-------------------------------------------
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
int x;
f>>x;
///in, sf, nod, val, poz;
update(1,n,1,x,i);
}
for(int i=1; i<=m; i++)
{
int c,in2,sf2;
f>>c;
if(c==1)
{
f>>a>>b;
update(1,n,1,b,a);
}
else
{
f>>in2>>sf2;
g<<cauta(1,n,in2,sf2,1)<<"\n";
}
}
}