#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,i,v[100001],m;
int op,poz,nr;
int arb[400001];
void build(int poz,int st,int dr)
{
if(st==dr)
{
arb[poz]=v[st];
}
else
{
int mid=(st+dr)/2;
build(poz*2,st,mid);
build(poz*2+1,mid+1,dr);
arb[poz]=max(arb[2*poz],arb[2*poz+1]);
}
}
void update(int poz,int nr,int st,int dr,int p)
{
if(st==dr)
{
arb[poz]=nr;
return;
}
int mid=(st+dr)/2;
if(p<=mid)
update(poz*2,nr,st,mid,p);
else
update(poz*2+1,nr,mid+1,dr,p);
arb[poz]=max(arb[poz*2],arb[poz*2+1]);
}
int query(int qst,int qdr,int st,int dr,int poz)
{
if(st>=qst&&dr<=qdr)
return arb[poz];
if(st>qdr)
return -1;
if(dr<qst)
return -1;
int mid=(st+dr)/2;
int a,b;
a=query(qst,qdr,st,mid,poz*2);
b=query(qst,qdr,mid+1,dr,poz*2+1);
return max(a,b);
}
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++)
fin>>v[i];
build(1,1,n);
for(i=1; i<=m; i++)
{
fin>>op>>poz>>nr;
if(op==1)
update(1,nr,1,n,poz);
else fout<<query(poz,nr,1,n,1)<<"\n";
}
}