#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MN -1
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m;
int a[100002], ai[400001];
void construct(int s, int d, int p){
if(s == d){
ai[p] = a[s];
return ;
}
int mid = (s+d)/2;
construct(s, mid, 2*p+1);
construct(mid+1, d, 2*p+2);
ai[p] = max(ai[2*p+1], ai[2*p+2]);
}
int query(int a, int b, int s, int d, int pos){
if(a<=s && b>=d)
return ai[pos];
if(a > d || b < s)
return MN;
int mid = (s+d)/2;
return max(query(a,b,s,mid,pos*2+1), query(a,b,mid+1,d, pos*2+2));
}
void update(int a, int b, int pos, int val, int n){
if(a == b){
ai[n] = val;
return;
}
int mid = (a+b)/2;
if(pos <= mid){
update(a, mid, pos, val, n*2+1);
} else {
update(mid+1, b, pos, val, n*2+2);
}
ai[n] = max(ai[n*2+1], ai[n*2+2]);
}
int main(){
fin >> n>>m;
for(int i = 0; i<n; i++){
fin >> a[i];
}
construct(0, n-1, 0);
int q,a,b;
for(int i = 1; i<= m; i++){
fin >> q>> a>>b;
if(q==0){
fout << query(a-1,b-1,0, n-1, 0)<<"\n";
} else {
update(0, n-1, a-1, b, 0);
}
}
return 0;
}