#include <cstdio>
#include <algorithm>
#define NMax 262144
using namespace std;
int aint[NMax+1];
int N,n;
void Update(int p, int x)
{
int tata;
p = N+p-1;
aint[p] = x;
while(p > 1)
{
if(p%2) --p;
tata = p/2;
aint[tata] = max(aint[p], aint[p+1]);
p = tata;
}
}
int Query(int p, int x, int y, int st, int dr)
{
if(st==x && dr==y)
return aint[p];
int mid = (st+dr)/2;
if(y <= mid) return Query(2*p,x,y,st,mid);
else if( mid+1 <= x) return Query(2*p+1,x,y,mid+1,dr);
return max( Query(2*p,x,mid,st,mid), Query(2*p+1,mid+1,y,mid+1,dr) );
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i,op,x,y,M;
scanf("%d %d",&n,&M);
for(N = 1; N < n; N *=2);
for(i = 1; i <= n; ++i)
{
scanf("%d",&x);
aint[N+i-1] = x;
}
for(i = N-1; i >= 1; --i) aint[i] = max( aint[2*i], aint[2*i+1] );
for(i = 1; i <= M; ++i)
{
scanf("%d %d %d",&op,&x,&y);
if(op==0)
printf("%d\n", Query(1,x,y,1,N) );
else
Update(x,y);
}
return 0;
}