#include <fstream>
#define Nmax 100009
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,MAX[4*Nmax],x,p;
void update (int node, int st, int dr, int A, int B, int val) {
if (st==dr) {
MAX[node]=val;
return;
}
int mij= (st+dr)/2 , s1=node*2, s2=s1+1;
if (A<=mij) update(s1, st, mij, A, B, val);
else update(s2, mij+1, dr, A, B, val);
MAX[node] = max(MAX[s1],MAX[s2]);
}
int querry(int node, int st, int dr, int A, int B) {
if (A<=st && dr<=B) {
return MAX[node];
}
int sol1=0, sol2=0;
int mij=(st+dr)/2, s1=2*node, s2=s1+1;
if (A<=mij) sol1=querry(s1, st, mij, A, B);
if (mij<B) sol2=querry(s2, mij+1, dr, A, B);
return max(sol1,sol2);
}
void ReadInput() {
f>>n>>m;
for (int i=1; i<=n; ++i) {
f>>x;
update(1, 1, n, i, i, x);
}
}
void Solve() {
for (int test=1; test<=m; ++test) {
int A,B;
f>>p>>A>>B;
if (p==1) update(1, 1, n, A, A, B);
else g<<querry(1, 1, n, A, B)<<'\n';
}
}
int main() {
ReadInput();
Solve();
f.close(); g.close();
return 0;
}