#include<stdio.h>
#define Nmax 500005
int arb[Nmax],N,M;
int best,in,sf;
int max(int a,int b)
{
return (a<b?b:a);
}
void querry(int nod,int st,int dr)
{
if (in<=st && dr<=sf)
{
best=max(best,arb[nod]);
return ;
}
int mid=st+(dr-st)/2;
if (in<=mid) querry(2*nod,st,mid);
if (mid<sf) querry(2*nod+1,mid+1,dr);
}
void ins(int nod,int st,int dr,int poz,int val)
{
if (st==dr)
{
arb[nod]=val;
return ;
}
int mid=st+(dr-st)/2;
if (poz<=mid) ins(2*nod,st,mid,poz,val);
else ins(2*nod+1,mid+1,dr,poz,val);
arb[nod]=-1;
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void solve()
{
int a,b,c;
for(int i=1;i<=M;++i)
{
scanf("%d%d%d",&a,&b,&c);
if (!a)
{
in=b;
sf=c;
best=-1;
querry(1,1,N);
printf("%d\n",best);
}
else
ins(1,1,N,b,c);
}
}
void cit();
int main()
{
cit();
solve();
return 0;
}
void cit()
{
int a;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i)
{
scanf("%d",&a);
ins(1,1,N,i,a);
}
}