#include <fstream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int v[100005],pom[400005];
int n,m;
int rez;
int build(int st,int dr, int poz)
{
// cout<<st<<" "<<dr<<" "<<poz<<'\n';
if(st==dr)
{
pom[poz]=v[st];
return 0;
}
int mij=(st+dr)/2;
build(st,mij , poz*2);
build(mij+1,dr,poz*2+1);
pom[poz]=max(pom[poz*2],pom[poz*2+1]);
return 0;
}
int modif(int pozitie,int st,int dr,int poz,int val)
{
// cout<<st<<" "<<dr<<"\n";
if(st==dr)
{
pom[poz]=val;
return 0;
}
int mij=(st+dr)/2;
if(pozitie<=mij)
{
modif(pozitie,st,mij,poz*2,val);
}
else
{
modif(pozitie,mij+1,dr,poz*2+1,val);
}
pom[poz]=max(pom[poz*2],pom[poz*2+1]);
return 0;
}
int query(int st,int dr,int l,int r,int poz)
{
//cout<<l<<" "<<r<<" "<<poz<<'\n';
if(l>r)
{
return 0;
}
if(l==r)
{
rez=max(rez,pom[poz]);
return 0;
}
if(st<=l && r<=dr)
{
rez=max(rez,pom[poz]);
return 0;
}
int mij=(l+r)/2;
if(st<=mij)
{
query(st,dr,l,mij,poz*2);
}
if(mij<dr)
{
query(st,dr,mij+1,r,poz*2+1);
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
build(1,n,1);
int cnt=0,ver=1;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(a==0)
{
rez=-1;
query(b,c,1,n,1);
cout<<rez<<'\n';
}
else{
modif(b,1,n,1,c);
}
}
return 0;
}
//manuscrisul voinici