#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
int v[4 * N];
void update(int st , int dr , int root , int poz , int val){
if(st == dr){
v[root] = val ;
return ;
}
int mid = (st + dr) / 2 ;
if(poz <= mid)
update (st , mid , 2* root , poz , val);
else
update(mid + 1 , dr , 2 * root + 1 , poz , val);
v[root] = max(v[root * 2 ] , v[root * 2 + 1]);
}
int ans ;
void query(int st , int dr , int nod , int a , int b){
if (a <= st && dr <= b){
ans = max(ans , v[nod]);
return ;
}
int mid = (st + dr )/ 2;
if(a <= mid)
query(st , mid , nod * 2 , a , b);
if( b > mid)
query(mid + 1 , dr , nod * 2 + 1 , a , b);
}
int main(){
int n , m ;
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> n >> m ;
for(int i = 1 ; i <= n ; i++){
int x ;
in >> x;
update(1,n,1,i,x);
}
while(m--){
int q ;
in >> q;
int a , b ;
in >> a >> b ;
if(q == 1)
update(1,n,1,a,b);
else{
ans = -INF;
query(1 , n , 1 , a , b);
out << ans << '\n';
}
}
}