#include <iostream>
#include <fstream>
#include <vector>
#define MAXN 100001
using namespace std;
int int_tree[MAXN*4];
int maxim;
void maxi(int l, int r, int qs, int qe, int i){
if (qs <= l && qe >= r){
maxim = max(maxim, int_tree[i]);
return;
}
int mid = (l+r)/2;
if(qs<=mid) maxi(l, mid, qs, qe, 2*i+1);
if(qe>mid) maxi(mid+1, r, qs, qe, 2*i+2);
}
void change_element(int l, int r, int i, int k, int val){
if(l==r){
int_tree[i] = val;
return;
}
int mid = (l+r)/2;
if(k<=mid) change_element(l, mid, i*2+1, k, val);
else change_element(mid+1, r, i*2+2, k, val);
int_tree[i] = max(int_tree[2*i+1], int_tree[2*i + 2]);
}
int main() {
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, x;
/// Read data
fin>>n>>m;
for(int i=0;i<n;++i){
fin>>x;
change_element(0,n-1,0,i, x);
}
/// Walk tree for every range
int a, b, op;
while(m--){
fin>>op>>a>>b;
if(op==0){
maxim = -999;
maxi(0, n-1,a-1, b-1, 0);
fout<<maxim<<'\n';
}
else change_element(0,n-1,0,a-1, b);
}
return 0;
}