#include <iostream>
#include <algorithm>
#include <vector>
#define forn(i,n) for(int i=0;i<(int)n;++i)
#define DBG(a) cerr<<#a<<" = "<<(a)<<endl
#define DBGA(a) cerr<<#a<<" = "<<(a)<<", ";
#define DBG2(a,b) do{DBGA(a)DBG(b);}while(0)
#define ALL(v) v.begin(),v.end()
#define SZ(v) (int)v.size()
using namespace std;
template<typename T>
ostream &operator<<(ostream &os, vector<T> v){
os<<"[";
forn(i,SZ(v)){
if(i) os<<", ";
os<<v[i];
}
os<<"]";
return os;
}
struct Node{
int P = 0; // cantidad de P - C al final
int maxP = 0; // maxima diferencia de P en algún momento
int maxC = 0; // maxima diferencia de C en algún momento
int L = 0, R = 0; // L <= R, rango en el que se mueve. respueta es R-L
};
ostream &operator<<(ostream &os, Node &u){
os<<"("<<u.P<<","<<u.maxP<<","<<u.maxC<<","<<u.L<<","<<u.R<<")";
return os;
}
struct ST{
int n;
vector<Node> st;
ST(const string &s){
int m = SZ(s);
n = 1<<(32-__builtin_clz(m-1));
st.resize(2*n-1);
for(int i=n-1,j=0;j<m;++i,++j){
if(s[j] == 'P') st[i] = {1,1,-1,0,1};
else st[i] = {-1,-1,1,-1,1};
}
for(int i=n-2;i>=0;--i) st[i] = merge(st[2*i+2],st[2*i+1]);
}
Node merge(const Node &a, const Node &b){
Node ret;
ret.P = a.P + b.P;
ret.R = a.R;
ret.R = max(ret.R, a.P + b.maxP);
ret.L = a.L;
ret.L = min(ret.L, a.P - b.maxC);
ret.maxP = a.maxP;
ret.maxC = a.maxC;
ret.maxP = max(ret.maxP, a.P + b.maxP); // cual fue el subidon mas grande de P
ret.maxC = max(ret.maxC, -a.P + b.maxC); // puede ser negativo
return ret;
}
Node query(int ql, int qr, int l, int r, int i){
if(l>=qr||r<=ql) return Node();
if(l>=ql&&r<=qr){
//~ DBG2(i, st[i]);
return st[i];
}
int m=(l+r)/2;
return merge(query(ql,qr,m,r,2*i+2),query(ql,qr,l,m,2*i+1));
}
int query(int l, int r){
Node aux = query(l,r,0,n,0);
//~ DBG(aux);
return aux.R-aux.L;
}
};
void solve(){
int n, q;
string s;
cin>>n>>q>>s;
ST blocks(s);
//~ DBG(blocks.st);
while(q--){
int l,r;
cin>>l>>r;
l--;
//~ DBG2(l,r);
cout<<blocks.query(l,r)<<"\n";
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL
freopen("E.in", "r", stdin);
int tcs; cin>>tcs;
while(tcs--)
#endif
solve();
return 0;
}