#include <bits/stdc++.h>
using namespace std;
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
using vi = vector<int>;
using ii = pair<int, int>;
using vii = vector<ii>;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vb = vector<bool>;
using pll = pair<ll, ll>;
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
#define pb push_back
#define eb emplace_back
#define fst first
#define snd second
struct Node {
int maxPref, maxSuff;
int sum, ret;
Node() {
maxPref = maxSuff = sum = ret = 0;
}
Node(int x) {
maxPref = maxSuff = ret = max(x, 0);
sum = x;
}
};
Node merge(Node a, Node b) {
Node c;
c.sum = a.sum + b.sum;
c.maxPref = max(a.maxPref, a.sum + b.maxPref);
c.maxSuff = max(a.maxSuff + b.sum, b.maxSuff);
c.ret = max({a.ret + b.sum, a.sum + b.ret, a.maxPref + b.maxSuff});
return c;
}
const int SZ = 1 << 19;
Node st[2 * SZ];
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, q;
string s;
cin >> n >> s >> q;
forn(i, n) st[i + SZ] = s[i] == 'T' ? +1 : -1;
dforsn(i, 1, SZ) st[i] = merge(st[2 * i], st[2 * i + 1]);
forn(_, q) {
int l, r;
cin >> l >> r;
--l;
Node leftRet, rightRet;
for (l += SZ, r += SZ; l < r; l /= 2, r /= 2) {
if (l & 1) leftRet = merge(leftRet, st[l++]);
if (r & 1) rightRet = merge(st[--r], rightRet);
}
cout << merge(leftRet, rightRet).ret << "\n";
}
return 0;
}