#include<iostream>
#include<fstream>
#define DX 100000
using namespace std;
fstream fin("arbint.in",ios::in),fout("arbint.out",ios::out);
int x[DX],ai[4*DX],maxi,n,m;
void build(int nod,int st,int dr)
{
int m=(st+dr)/2,plod=nod*2;
if(st==dr)
{
ai[nod]=x[st];
return ;
}
build(plod,st,m);
build(plod+1,m+1,dr);
ai[nod]=max(ai[plod],ai[plod+1]);
}
void query(int nod,int st,int dr,int stq,int drq)
{
int m=(st+dr)/2,plod=nod*2;
if(stq<=st && dr<=drq)
{
maxi=max(maxi,ai[nod]);
return;
}
if(st==dr) return ;
query(plod,st,m,stq,drq);
query(plod+1,m+1,dr,stq,drq);
}
void update(int nod,int st,int dr,int pecine,int cuce)
{
int m=(st+dr)/2,plod=nod*2;
if(st==dr)
{
if(st==pecine) ai[nod]=x[st]=cuce;
return ;
}
if(st<=pecine && pecine<=m)
update(plod,st,m,pecine,cuce);
if(m<pecine && pecine<=dr)
update(plod+1,m+1,dr,pecine,cuce);
ai[nod]=max(ai[plod],ai[plod+1]);
}
int main()
{
int i,a,b,c;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>x[i];
build(1,1,n);
for(i=1;i<=m;i++)
{
fin>>c>>a>>b;
if(c==0)
{
maxi=-9;
query(1,1,n,a,b);
fout<<maxi<<"\n";
}
else
{
update(1,1,n,a,b);
}
}
}