#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(a) begin(a),end(a)
using vi = vector<int>;
using ll = long long;
const int mxN = (int)1e5;
const int B = 300;
vi v;
string s;
int n, q;
ll sum, ans[mxN];
int l[mxN], r[mxN], a[mxN], cnt[1<<26];
void add(int i){
for(auto u : v) sum+=cnt[a[i]^u];
cnt[a[i]]++;
}
void rem(int i){
cnt[a[i]]--;
for(auto u : v) sum-=cnt[a[i]^u];
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> q >> s;
for(int i = 0; i < n; i++)
a[i+1]=a[i]^(1<<(s[i]-'a'));
v.pb(0);
for(int i = 0; i < 26; i++) v.pb(1<<i);
for(int i = 0; i < q; i++)
cin >> l[i] >> r[i], l[i]--;
vi ord(q,0); iota(all(ord),0);
sort(all(ord),[&](int i, int j){
if(l[i]/B!=l[j]/B) return l[i]<l[j];
return (l[i]/B)%2?r[i]>r[j]:r[i]<r[j];
});
int L = 0, R = -1;
for(auto i : ord){
while(L>l[i]) add(--L);
while(R<r[i]) add(++R);
while(L<l[i]) rem(L++);
while(R>r[i]) rem(R--);
ans[i] = sum;
}
for(int i = 0; i < q; i++) cout << ans[i] << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbChhKSBiZWdpbihhKSxlbmQoYSkKdXNpbmcgdmkgPSB2ZWN0b3I8aW50PjsKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgpjb25zdCBpbnQgbXhOID0gKGludCkxZTU7CmNvbnN0IGludCBCID0gMzAwOwoKdmkgdjsKc3RyaW5nIHM7CmludCBuLCBxOyAKbGwgc3VtLCBhbnNbbXhOXTsKaW50IGxbbXhOXSwgcltteE5dLCBhW214Tl0sIGNudFsxPDwyNl07Cgp2b2lkIGFkZChpbnQgaSl7CiAgICBmb3IoYXV0byB1IDogdikgc3VtKz1jbnRbYVtpXV51XTsKICAgIGNudFthW2ldXSsrOwp9Cgp2b2lkIHJlbShpbnQgaSl7CiAgICBjbnRbYVtpXV0tLTsKICAgIGZvcihhdXRvIHUgOiB2KSBzdW0tPWNudFthW2ldXnVdOwp9CgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBxID4+IHM7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGFbaSsxXT1hW2ldXigxPDwoc1tpXS0nYScpKTsKICAgIHYucGIoMCk7IAogICAgZm9yKGludCBpID0gMDsgaSA8IDI2OyBpKyspIHYucGIoMTw8aSk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSAKICAgICAgICBjaW4gPj4gbFtpXSA+PiByW2ldLCBsW2ldLS07CiAgICB2aSBvcmQocSwwKTsgaW90YShhbGwob3JkKSwwKTsKICAgIHNvcnQoYWxsKG9yZCksWyZdKGludCBpLCBpbnQgail7CiAgICAgICAgaWYobFtpXS9CIT1sW2pdL0IpIHJldHVybiBsW2ldPGxbal07CiAgICAgICAgcmV0dXJuIChsW2ldL0IpJTI/cltpXT5yW2pdOnJbaV08cltqXTsKICAgIH0pOwogICAgaW50IEwgPSAwLCBSID0gLTE7CiAgICBmb3IoYXV0byBpIDogb3JkKXsKICAgICAgICB3aGlsZShMPmxbaV0pIGFkZCgtLUwpOwogICAgICAgIHdoaWxlKFI8cltpXSkgYWRkKCsrUik7CiAgICAgICAgd2hpbGUoTDxsW2ldKSByZW0oTCsrKTsKICAgICAgICB3aGlsZShSPnJbaV0pIHJlbShSLS0pOwogICAgICAgIGFuc1tpXSA9IHN1bTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDA7IGkgPCBxOyBpKyspIGNvdXQgPDwgYW5zW2ldIDw8ICJcbiI7Cn0=