#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int aint[400005], v[100005];
void build(int nod, int st, int dr)
{
if(st==dr)
{
aint[nod]=v[st];
return;
}
int med=(st+dr)/2;
build(2*nod, st, med);
build(2*nod+1, med+1, dr);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
void upd(int nod, int st, int dr, int poz, int val)
{
if(st==dr)
{
aint[nod]=val;
return;
}
int med=(st+dr)/2;
if(poz<=med)
upd(2*nod, st, med, poz, val);
else
upd(2*nod+1, med+1, dr, poz, val);
aint[nod]=max(aint[2*nod+1], aint[2*nod]);
}
int qry(int nod, int st, int dr, int a, int b)
{
if(a<=st && dr<=b)
{
return aint[nod];
}
int med=(st+dr)/2,maxim=-1;
if(a<=med)
maxim=max(qry(2*nod, st, med, a, b),maxim);
if(b>med)
maxim=max(qry(2*nod+1, med+1, dr, a, b),maxim);
return maxim;
}
/*void afisare(int nod, int st, int dr)
{
if(st==dr)
{
cout<<aint[nod]<<" "<<st<<'\n';
return;
}
int med=(st+dr)/2;
afisare(2*nod, st, med);
afisare(2*nod+1, med+1, dr);
cout<<aint[nod]<<" "<<st<<" "<<dr<<'\n';
}*/
int main()
{
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++)
cin>>v[i];
build(1, 1, n);
for(int i=1;i<=t;i++)
{
int a, b, c;
cin>>c>>a>>b;
if(c==1)
upd(1, 1, n, a, b);
if(c==0)
{
cout<<qry(1, 1, n, a, b)<<'\n';
}
}
//afisare(1, 1,n);
return 0;
}