#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define fst first
#define snd second
#define pb push_back
#define forn(i,a,b) for(int i = a; i<b; i++)
#define ALL(x) x.begin(),x.end()
#define SZ(x) (int)x.size()
#define mset(a,v) memset(a,v,sizeof(a))
#define FIN ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
template <typename T>
using iset = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
#ifdef D
#define debug(x) cout<<x
#else
#define debug(x) //nothing
#endif
const int MAXN = 1000+5;
string color;
int main(){ FIN;
ll n,q; cin>>n>>q;
cin>>color;
vector<vector<ll>> res(n,vector<ll>(n,0));
forn(r,0,n){
ll azul, rojo; azul=rojo=0;
for(int i = r; i>=0; i--){
if(color[i]=='P'){
//rojo
if(azul>0) azul--;
rojo++;
}else{
//azul
if(rojo>0) rojo--;
azul++;
}
//cout<<i<<" "<<r<<" "<<rojo<<" "<<azul<<'\n';
res[i][r]=rojo+azul;
}
}
forn(i,0,q){
ll l,r; cin>>l>>r;
l--; r--;
cout<<res[l][r]<<'\n';
}
return 0;
}