# include <bits/stdc++.h>
# define NR 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,n,m,a,b,tip,maxx,val;
int ARB[4*NR];
void update (int nod, int ci, int cs, int poz, int val) {
if (ci==poz && poz==cs) {
ARB[nod]=val;
} else {
int mij=(ci + cs)/2;
if (poz<=mij) update (2*nod, ci, mij, poz, val);
else update (2*nod+1, mij+1, cs, poz, val);
ARB[nod]=max(ARB[2*nod], ARB[2*nod+1]);
}
}
void query (int nod, int ci, int cs, int CI, int CS) {
if (CI<=ci && cs<=CS) {
maxx=max(maxx, ARB[nod]);
} else {
int mij=(ci + cs)/2;
if (CI<=mij) query (2*nod, ci, mij, CI, CS);
if (mij<CS) query (2*nod+1, mij+1, cs, CI, CS);
}
}
int main ()
{
f>>n>>m;
for (int i=1; i<=n; ++i) {
f>>val;
update (1, 1, n, i, val);
}
for (int i=1; i<=m; ++i) {
f>>tip>>a>>b;
if (tip==0) { // query
maxx=0;
query (1, 1, n, a, b);
g<<maxx<<"\n";
} else {
update (1, 1, n, a, b);
}
}
return 0;
}