#include <iostream>
#include <cstdio>
using namespace std;
int arb[400005],vCit[100005],n,m,rasp;
void buildarb(int pai=1,int st=1,int dr=n)
{
if(st==dr)
{
arb[pai]=vCit[st];
return;
}
int mij=(st+dr)/2;
buildarb(2*pai,st,mij);
buildarb(2*pai+1,mij+1,dr);
arb[pai]=max(arb[2*pai],arb[2*pai+1]);
}
void query(int ST,int DR,int pai=1,int st=1,int dr=n)
{
if(ST<=st&&dr<=DR)
{
rasp=max(rasp,arb[pai]);
return;
}
int mij=(st+dr)/2;
if(mij>=ST)
query(ST,DR,2*pai,st,mij);
if(mij<DR)
query(ST,DR,2*pai+1,mij+1,dr);
}
void update(int poz,int val,int pai=1,int st=1,int dr=n)
{
if(st==dr)
{
arb[pai]=val;
return;
}
int mij=(st+dr)/2;
if(mij>=poz)
update(poz,val,2*pai,st,mij);
else
update(poz,val,2*pai+1,mij+1,dr);
arb[pai]=max(arb[2*pai],arb[2*pai+1]);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
scanf("%d",&vCit[i]);
buildarb();
int t,a,b;
while(m--)
{
scanf("%d%d%d",&t,&a,&b);
if(!t)
{
rasp=-1;
query(a,b);
printf("%d\n",rasp);
}
else
update(a,b);
}
return 0;
}