#include <cstdio>
#include <algorithm>
#define IN "arbint.in"
#define OUT "arbint.out"
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 1<<20
using namespace std;
int poz,x,y,t,val,N,M;
int a[N_MAX];
inline int left(int nod)
{
return nod << 1;
}
inline int right(int nod)
{
return (nod << 1) + 1;
}
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d%d", &N,&M);
}
void update(int nod,int p,int u)
{
if(p == u)
{
a[nod] = val;
return ;
}
int m = (p+u)/2;
if(poz <= m)
update(left(nod),p,m);
else
update(right(nod),m+1,u);
a[nod] = max(a[left(nod)],a[right(nod)]);
}
inline int querry(int nod,int p,int u)
{
if(x <= p && u <= y)
return a[nod];
int m = (p+u)/2,xx=0,yy=0;
if( x <= m )
xx = querry(left(nod),p,m);
if( y > m )
yy = querry(right(nod),m+1,u);
return max(xx,yy);
}
void solve()
{
FOR(i,1,N)
{
scanf("%d", &val);
poz=i;
update(1,1,N);
}
FOR(i,1,M)
{
scanf("%d%d%d", &t,&x,&y);
if(t)
{
val = y;
poz = x;
update(1,1,N);
}
else
printf("%d\n", querry(1,1,N) );
}
}
int main()
{
scan();
solve();
return 0;
}