#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector vi;
typedef vector vll;
typedef vector vs;
typedef vector vpii;
typedef vector vii;
typedef map<int,int> mpii;
typedef unordered_map<int,int> umpii;
typedef unordered_set useti;
typedef set seti;
typedef multiset mseti;
#define pb push_back
#define ull unsigned long long
#define ld long double
#define mod 1000000007
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)
bool comp(const pair<ll, ll> &a, const pair<ll, ll> &b){
if(a.first == b.first)
return a.second > b.second;
return a.first < b.first;
}
void init_code(){
fast_io;
#ifndef ONLINE_JUDGE
freopen(“input.txt”, “r”, stdin);
freopen(“output.txt”, “w”, stdout);
#endif
}
void build(vll arr, vector<pair<ll, ll>>&segtree, ll s, ll e, ll idx){
if(s == e){
segtree[idx].first = arr[s];
segtree[idx].second = 0;
return;
}
ll mid = (s+e)/2;
build(arr, segtree, s, mid, 2idx);
build(arr, segtree, mid+1, e, 2idx+1);
pair<ll,ll> a, b;
a = segtree[2idx];
b = segtree[2idx+1];
segtree[idx].first = max(a.first, b.first);
segtree[idx].second = min(max(a.first, b.second), max(a.second, b.first));
}
void update(vll &arr, vector<pair<ll, ll>>&segtree, ll s, ll e, ll idx, ll i, ll val){
if(s == e){
arr[i] = val;
segtree[idx].first = val;
segtree[idx].second = 0;
//build(arr, segtree, 0, arr.size()-1, 1);
return;
}
ll mid = (s+e)/2;
if(i <= mid)
update(arr, segtree, s, mid, 2*idx, i, val);
else
update(arr, segtree, mid+1, e, 2*idx+1, i, val);
pair<ll,ll> a, b;
a = segtree[2*idx];
b = segtree[2*idx+1];
segtree[idx].first = max(a.first, b.first);
segtree[idx].second = min(max(a.first, b.second), max(a.second, b.first));
}
pair<ll, ll> query(vector<pair<ll, ll>> segtree, ll s, ll e, ll l, ll r, ll idx){
if(r < s or l > e)
return {0, 0};
if(s >= l and e<=r)
return segtree[idx];
ll mid = (s+e)/2;
pair<ll, ll> a = query(segtree, s, mid, l, r, 2idx);
pair<ll, ll> b = query(segtree, mid+1, e, l, r, 2idx+1);
return {max(a.first, b.first), min(max(a.first, b.second), max(a.second, b.first))};
}
int main() {
init_code();
// your code goes here
ll n;
cin >> n;
vll arr(n);
for (int i = 0; i < n; ++i)
{
/* code /
cin >> arr[i];
}
vector<pair<ll, ll>> segtree(4n);
build(arr, segtree, 0, n-1, 1);
ll q;
cin >> q;
for (int i = 0; i < q; ++i)
{
/* code */
char ch;
ll a, b;
cin >> ch >> a >> b;
if(ch == ‘U’){
update(arr, segtree, 0, n-1, 1, a-1, b);
}
else{
pair<ll, ll> temp = query(segtree, 0, n-1, a-1, b-1, 1);
cout << temp.first+temp.second << endl;
}
}
return 0;
}