#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int v[100001],N,M,A[400001],maxint;
int MAX(int a, int b)
{
if (a>b) return a;
else return b;
}
void build(int n, int s, int d)
{
if (s==d) A[n]=v[s];
else
{
int m=(s+d)/2;
build (2*n,s,m);
build (2*n+1,m+1,d);
A[n]=MAX(A[2*n], A[2*n+1]);
}
}
void update(int n, int s, int d, int i, int f)
{
if (s==d) A[n]=f;
else
{
int m=(s+d)/2;
if (i<=m) update(2*n,s,m,i,f);
else update(2*n+1,m+1,d,i,f);
A[n]=MAX(A[2*n],A[2*n+1]);
}
}
void query(int n, int s, int d, int a, int b)
{
if (a<=s&&d<=b)
{
maxint=MAX(A[n],maxint);
}
else
{
int m=(s+d)/2;
if (a<=m) query(2*n,s,m,a,b);
if (b>m) query(2*n+1,m+1,d,a,b);
}
}
int main()
{
in>>N>>M;
for (int i=1; i<=N; i++) in>>v[i];
build(1,1,N);
int cod,a,b;
for (int i=1; i<=M; i++)
{
in>>cod>>a>>b;
if(cod==0)
{
maxint=0;
query(1,1,N,a,b);
out<<maxint<<'\n';
}
else update(1,1,N,a,b);
}
return 0;
}