#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int aint[400001],v[100001],maxx;
void ing(int nod,int st,int dr)
{
if(st==dr)
{
aint[nod]=v[st];
}
else
{
int mijl=(st+dr)/2;
ing(2*nod,st,mijl);
ing(2*nod+1,mijl+1,dr);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
}
void update(int nod,int st,int dr,int val,int pos)
{
if(st==dr)
{
aint[nod]=val;
}
else
{
int mijl=(st+dr)/2;
if(pos<=mijl)
update(2*nod,st,mijl,val,pos);
if(pos>=mijl+1)
update(2*nod+1,mijl+1,dr,val,pos);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
}
void query(int nod,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
maxx=max(aint[nod],maxx);
else
{
int mijl=(st+dr)/2;
if (a <= mijl)
query(2*nod,st,mijl,a,b);
if (b >= mijl + 1)
query(2*nod+1,mijl+1,dr,a,b);
}
}
int main()
{
int n,m,i,j,cer,x,y;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>v[i];
}
ing(1,1,n);
for(i=1;i<=m;i++)
{
in>>cer>>x>>y;
if(cer==1)
update(1,1,n,y,x);
if(cer==0)
{
maxx=-1;
query(1,1,n,x,y);
out<<maxx<<'\n';
}
}
return 0;
}