#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int N = (1<<20) + 1;
int a[N], vd[N], T, n;
struct sgmt{
int tm = 0, L, R, bg, tp;
} seg[N<<1], ans, Null;
set<pair<int, int>> Set;
void Add1(sgmt S, int cur = 1, int st = 1, int en = N){
if (S.L >= en or S.R <= st)
return;
if (S.L <= st and S.R >= en){
seg[cur] = S;
return;
}
int mid = (st + en) / 2;
Add1(S, cur + cur, st, mid);
Add1(S, cur+cur+1, mid, en);
}
void get(int i, int cur = 1, int st = 1, int en = N){
if (i >= en or i < st)
return;
if (seg[cur].tm > ans.tm)
ans = seg[cur];
if (en - st == 1)
return;
int mid = (st + en) / 2;
get(i, cur + cur, st, mid);
get(i, cur+cur+1, mid, en);
}
pair<int, int> extend(int l, int r){
int ind;
if (a[l] < a[r]){
if (r == n + 1)
ind = 0;
else{
for (ind=l-1;a[ind] <= a[r];)
ind--;
}
Add1({++T, ind, l+1, r - l, 1});
l = ind;
}
else{
if (l == 0)
ind = n + 1;
else{
for (ind=r+1;a[ind] <= a[l];)
ind++;
}
Add1({++T, r, ind, r - l, 0});
r = ind;
}
return {l, r};
}
vector<int> vec;
pair<int, int> extend2(int l, int r){
sort(begin(vec), end(vec));
int ind;
if (a[l] < a[r]){
if (r == n + 1)
ind = 0;
else{
for (int i : vec){
if (i < l and a[i] > a[r])
ind = i;
}
}
// if (r)
Add1({++T, ind, l+1, r - l, 1});
l = ind;
}
else{
if (l == 0)
ind = n + 1;
else{
for (int i : vec){
if (i > r and a[i] > a[l]){
ind = i;
break;
}
}
}
Add1({++T, r, ind, r - l, 0});
r = ind;
}
return {l, r};
}
int main(){
int A, B, q, nxt = 0;
cin>>n>>A;
a[0] = n + 1, a[n + 1] = n + 2, nxt = n + 2;
for (int i=1;i<=n;i++)
cin>>a[i];
for (int i=0;i<=n+1;i++)
Set.insert({a[i], i});
vector<pair<int, int>> rec;
Add1({++T, A, A+1, 1, 0});
rec.push_back({A-1, A+1});
while (rec.back().second - rec.back().first < n + 1)
rec.push_back(extend(rec.back().first, rec.back().second));
cin>>q;
for (int i=1, id, e, val;i<=q;i++){
char c;
cin>>c;
if (c == 'E'){
cin>>id>>e, e += 1;
vec.clear();
for (int j=0;j<e;j++){
auto [vl, ind] = *rbegin(Set);
Set.erase({vl, ind});
vec.push_back(ind);
val = vl;
a[ind]++;
}
for (int ind : vec)
Set.insert({a[ind], ind});
nxt++;
vec.push_back(id);
Set.erase({a[id], id});
a[id] = val;
Set.insert({a[id], id});
if (id == A)
continue;
while (rec.back().second > id and rec.back().first < id)
rec.pop_back();
while (rec.back().second - rec.back().first < n + 1)
rec.push_back(extend2(rec.back().first, rec.back().second));
}
else{
cin>>B;
ans = Null;
get(B);
if (ans.tp == 1)
cout<<ans.bg + ans.R - B - 2<<'\n';
else
cout<<ans.bg + B - ans.L - 1<<'\n';
}
}
}