#include <iostream>
#include <fstream>
#include <algorithm>
#define maxN 100005*2
using namespace std;
int A[maxN];
void update(int l, int r, int poz,int i, int v){
if (l == r){
A[i] = v;
}
else {
int m = (l + r) / 2;
if (m >= poz)
update(l, m, poz, i * 2, v);
else
update(m + 1, r, poz, i * 2 + 1, v);
A[i] = max(A[i*2],A[i*2+1]);
}
}
void vezi(int l, int r,int a, int b, int i, int &M){
if (a <= l && r <= b){
if (A[i] > M) M = A[i];
}
else{
int m = (l + r) / 2;
if (m >= a)vezi(l, m, a, b, i * 2, M);
if (m < b)vezi(m + 1, r, a, b, i * 2 + 1, M);
}
}
int main(){
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
f >> n >> m;
for (int i = 1; i <= n; ++i) {
int x;
f >> x;
update(1, n, i, 1, x);
}
for (int i = 0; i < m; ++i){
int x, y, z;
f >> x >> y >> z;
if (x == 0){
int m = 0;
vezi(1, n, y, z, 1, m);
g << m << "\n";
}
else
update(1, n, y, 1, z);
}
f.close();
g.close();
return 0;
}