#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5+5;
int n,q,v1[MAXN],v2[MAXN];
struct segm{
vector<int> tree;
void init(int n,int v[]){
tree.assign(4*n,-1e9);
build(1,1,n,v);
}
void build(int node,int l,int r,int v[]){
if(l == r){
tree[node] = v[l];
return;
}
int mid = (l+r)/2;
build(2*node,l,mid,v);
build(2*node+1,mid+1,r,v);
tree[node] = max(tree[2*node],tree[2*node+1]);
}
int query(int node,int l,int r,int ql,int qr){
if(r<ql || qr < l)return -1e9;
if(ql <= l && r<= qr){
return tree[node];
}
int mid = (l+r)/2;
return max(query(2*node,l,mid,ql,qr),query(2*node+1,mid+1,r,ql,qr));
}
};
int main()
{
cin >> n;
string s;
cin >> s;
for(int i = 1;i<=n;i++){
v1[i] = v1[i-1]+((s[i-1]=='C')?-1:1);
}
for(int i = n;i>=1;i--){
v2[i] = v2[i+1]+((s[i-1]=='C')?-1:1);
}
segm ps,ss;
ps.init(n,v1);
ss.init(n,v2);
cin >> q;
while(q--){
int l,r;
cin >> l >> r;
int ans1 = ps.query(1,1,n,l,r)-v1[l-1];
int ans2 = ss.query(1,1,n,l,r)-v2[r+1];
cout << max(ans1,ans2) << '\n';
}
return 0;
}