#include <stdio.h>
int N,M,i,x,a,b;
int T[262144];
inline int fm(int a,int b)
{
if(a>b) return a;
else return b;
}
inline void add(int nod,int L,int R,int pos,int val)
{
int M=(L+R)/2;
if(L==pos&&pos==R) T[nod]=val;
else
{
if(pos<=M) add(2*nod,L,M,pos,val);
else add(2*nod+1,M+1,R,pos,val);
T[nod]=fm(T[2*nod],T[2*nod+1]);
}
}
inline int max(int nod,int L,int R)
{
int M=(L+R)/2,sol1=0,sol2=0;
if(a<=L&&R<=b) return T[nod];
else
{
if(a<=M) sol1=max(2*nod,L,M);
if(M<b) sol2=max(2*nod+1,M+1,R);
return fm(sol1,sol2);
}
}
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);
add(1,1,N,i,x);
}
for(i=1;i<=M;i++)
{
scanf("%d%d%d",&x,&a,&b);
if(x==0) printf("%d\n",max(1,1,N));
else add(1,1,N,a,b);
}
return 0;
}