#include <fstream>
#define Nmax 100005
using namespace std;
ofstream fout("arbint.out");
ifstream fin("arbint.in");
int v[Nmax],val,poz,n,m,nr1,nr2;
void update(int nod, int st, int dr)
{
int mij=0;
if(st==dr)
{
v[nod]=val;
return;
}
mij=(st+dr)/2;
if(poz<=mij)
{
update(nod*2,st,mij);
}
else
{
update(nod*2+1,mij+1,dr);
}
v[nod]=max(v[nod*2],v[nod*2+1]);
}
int maxim(int nod, int st, int dr, int start, int stop)
{
if(st==start && dr==stop)
{
return v[nod];
}
int mij=(st+dr)/2;
if(start<=(st+dr)/2)
{
nr1=maxim(nod*2,st,mij,start,min(stop,mij));
}
if(stop>(st+dr)/2)
{
nr2=maxim(nod*2+1,mij+1,stop,max(mij+1,start),stop);
}
return max(nr1,nr2);
}
int main()
{
int x,a,b,i,o,y;
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>x;
val=x;
poz=i;
update(1,1,n);
}
for(i=1; i<=m; i++)
{
fin>>o>>x>>y;
if(o==0)
{
/*if(((x<=(n+1)/2) && (y<=(n+1)/2)) || ((x>(n+1)/2) && (y>(n+1)/2)))
{*/
nr1=0;
nr2=0;
fout<<maxim(1,1,n,x,y)<<'\n';
//}
/*else
{
stop=n/2;
a=maxim(1,1,n);
stop=y;
start=n/2+1;
b=maxim(1,1,n);
fout<<max(a,b);
}*/
}
else
{
poz=x;
val=y;
update(1,1,n);
}
}
return 0;
}