#include<algorithm>
using namespace std;
#define N_MAX 100005
int arb[N_MAX*3+300];
int n,m,i,x,op,a,b,Max;
void Update(int nod,int st,int dr,int a,int b,int val)
{
if(a<=st&&dr<=b)
{
arb[nod]=val;
return;
}
int md=(st+dr)>>1;
if(a<=md)
Update((nod<<1),st,md,a,b,val);
if(md<b)
Update((nod<<1)+1,md+1,dr,a,b,val);
arb[nod]=max(arb[(nod<<1)],arb[(nod<<1)+1]);
}
void GetMax(int nod,int st,int dr,int a,int b)
{
if(a<=st&&dr<=b)
{
if(arb[nod]>Max)
Max=arb[nod];
return;
}
int md=(st+dr)>>1;
if(a<=md)
GetMax((nod<<1),st,md,a,b);
if(md<b)
GetMax((nod<<1)+1,md+1,dr,a,b);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
Update(1,1,n,i,i,x);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&op,&a,&b);
if(op==0)
{
Max=0;
GetMax(1,1,n,a,b);
printf("%d\n",Max);
}
else
Update(1,1,n,a,a,b);
}
return 0;
}