#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#define FILL(a, x) memset(a, x, sizeof(a))
using namespace std;
typedef unsigned long long ll;
typedef pair<int, int> ii;
const int N = (int)1e6+3;
struct U128{
ll lo, hi;
U128(ll _lo=0, ll _hi=0):lo(_lo),hi(_hi){}
};
inline void add64(U128 &a, ll v){ ll o=a.lo; a.lo+=v; if(a.lo<o) ++a.hi; }
inline void sub64(U128 &a, ll v){ ll o=a.lo; a.lo-=v; if(o<v) --a.hi; }
inline bool isZero(const U128 &a){ return a.lo==0 && a.hi==0; }
static inline void div10(const U128 &a, U128 &q, unsigned &r){
ll hi=a.hi, lo=a.lo;
unsigned int w3=(unsigned int)(hi>>32), w2=(unsigned int)(hi&0xffffffffu);
unsigned int w1=(unsigned int)(lo>>32), w0=(unsigned int)(lo&0xffffffffu);
ll rem=0, cur;
unsigned int q3,q2,q1,q0;
cur = rem*4294967296ull + w3; q3 = (unsigned int)(cur/10ull); rem = cur%10ull;
cur = rem*4294967296ull + w2; q2 = (unsigned int)(cur/10ull); rem = cur%10ull;
cur = rem*4294967296ull + w1; q1 = (unsigned int)(cur/10ull); rem = cur%10ull;
cur = rem*4294967296ull + w0; q0 = (unsigned int)(cur/10ull); rem = cur%10ull;
q.hi = ( (ll)q3<<32 ) | q2;
q.lo = ( (ll)q1<<32 ) | q0;
r = (unsigned)rem;
}
static inline void printU128(U128 a){
if(isZero(a)){ cout<<0<<el; return; }
char buf[64]; int m=0; unsigned rem;
while(!isZero(a)){ U128 q; div10(a,q,rem); buf[m++] = char('0'+rem); a=q; }
for(int i=m-1;i>=0;--i) cout<<buf[i];
cout<<el;
}
struct Query{ int l,r,id,bl; };
static bool cmpQ(const Query& A, const Query& B){
if(A.bl!=B.bl) return A.bl<B.bl;
if(A.bl&1) return A.r>B.r;
return A.r<B.r;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n,q;
cin>>n>>q;
string s; cin>>s;
vector<int> pref(n+1,0);
FOR(i,1,n) pref[i]=pref[i-1]+(s[i-1]=='1'?1:-1);
vector<Query> qs(q);
int B = max(1,(int)sqrt(n+1));
FOR(i,0,q-1){
int u,v; cin>>u>>v;
qs[i].l=u-1; qs[i].r=v; qs[i].id=i; qs[i].bl=qs[i].l/B;
}
sort(qs.begin(), qs.end(), cmpQ);
int BASE = n+5, M = 2*(n+5)+7;
vector<int> cnt(M,0);
vector<ll> s1(M,0), s2(M,0);
U128 ans(0,0);
vector<U128> res(q);
int L=0, R=-1;
for(int i=0;i<sz(qs);++i){
int l=qs[i].l, r=qs[i].r;
while(R<r){
++R;
int t = pref[R] + BASE;
ll m = (ll)cnt[t];
ll idx = (ll)R;
ll delta = s2[t] + m*idx*idx - 2ull*idx*s1[t];
add64(ans, delta);
cnt[t]++; s1[t]+=idx; s2[t]+=idx*idx;
}
while(R>r){
int t = pref[R] + BASE;
ll m = (ll)cnt[t];
ll idx = (ll)R;
ll delta = s2[t] + m*idx*idx - 2ull*idx*s1[t];
sub64(ans, delta);
cnt[t]--; s1[t]-=idx; s2[t]-=idx*idx;
--R;
}
while(L<l){
int t = pref[L] + BASE;
ll m = (ll)cnt[t];
ll idx = (ll)L;
ll delta = s2[t] + m*idx*idx - 2ull*idx*s1[t];
sub64(ans, delta);
cnt[t]--; s1[t]-=idx; s2[t]-=idx*idx;
++L;
}
while(L>l){
--L;
int t = pref[L] + BASE;
ll m = (ll)cnt[t];
ll idx = (ll)L;
ll delta = s2[t] + m*idx*idx - 2ull*idx*s1[t];
add64(ans, delta);
cnt[t]++; s1[t]+=idx; s2[t]+=idx*idx;
}
res[qs[i].id]=ans;
}
FOR(i,0,q-1) printU128(res[i]);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7ICsraSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgRklMTChhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CmNvbnN0IGludCBOID0gKGludCkxZTYrMzsKCnN0cnVjdCBVMTI4ewpsbCBsbywgaGk7ClUxMjgobGwgX2xvPTAsIGxsIF9oaT0wKTpsbyhfbG8pLGhpKF9oaSl7fQp9OwppbmxpbmUgdm9pZCBhZGQ2NChVMTI4ICZhLCBsbCB2KXsgbGwgbz1hLmxvOyBhLmxvKz12OyBpZihhLmxvPG8pICsrYS5oaTsgfQppbmxpbmUgdm9pZCBzdWI2NChVMTI4ICZhLCBsbCB2KXsgbGwgbz1hLmxvOyBhLmxvLT12OyBpZihvPHYpIC0tYS5oaTsgfQppbmxpbmUgYm9vbCBpc1plcm8oY29uc3QgVTEyOCAmYSl7IHJldHVybiBhLmxvPT0wICYmIGEuaGk9PTA7IH0Kc3RhdGljIGlubGluZSB2b2lkIGRpdjEwKGNvbnN0IFUxMjggJmEsIFUxMjggJnEsIHVuc2lnbmVkICZyKXsKbGwgaGk9YS5oaSwgbG89YS5sbzsKdW5zaWduZWQgaW50IHczPSh1bnNpZ25lZCBpbnQpKGhpPj4zMiksIHcyPSh1bnNpZ25lZCBpbnQpKGhpJjB4ZmZmZmZmZmZ1KTsKdW5zaWduZWQgaW50IHcxPSh1bnNpZ25lZCBpbnQpKGxvPj4zMiksIHcwPSh1bnNpZ25lZCBpbnQpKGxvJjB4ZmZmZmZmZmZ1KTsKbGwgcmVtPTAsIGN1cjsKdW5zaWduZWQgaW50IHEzLHEyLHExLHEwOwpjdXIgPSByZW0qNDI5NDk2NzI5NnVsbCArIHczOyBxMyA9ICh1bnNpZ25lZCBpbnQpKGN1ci8xMHVsbCk7IHJlbSA9IGN1ciUxMHVsbDsKY3VyID0gcmVtKjQyOTQ5NjcyOTZ1bGwgKyB3MjsgcTIgPSAodW5zaWduZWQgaW50KShjdXIvMTB1bGwpOyByZW0gPSBjdXIlMTB1bGw7CmN1ciA9IHJlbSo0Mjk0OTY3Mjk2dWxsICsgdzE7IHExID0gKHVuc2lnbmVkIGludCkoY3VyLzEwdWxsKTsgcmVtID0gY3VyJTEwdWxsOwpjdXIgPSByZW0qNDI5NDk2NzI5NnVsbCArIHcwOyBxMCA9ICh1bnNpZ25lZCBpbnQpKGN1ci8xMHVsbCk7IHJlbSA9IGN1ciUxMHVsbDsKcS5oaSA9ICggKGxsKXEzPDwzMiApIHwgcTI7CnEubG8gPSAoIChsbClxMTw8MzIgKSB8IHEwOwpyID0gKHVuc2lnbmVkKXJlbTsKfQpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRVMTI4KFUxMjggYSl7CmlmKGlzWmVybyhhKSl7IGNvdXQ8PDA8PGVsOyByZXR1cm47IH0KY2hhciBidWZbNjRdOyBpbnQgbT0wOyB1bnNpZ25lZCByZW07CndoaWxlKCFpc1plcm8oYSkpeyBVMTI4IHE7IGRpdjEwKGEscSxyZW0pOyBidWZbbSsrXSA9IGNoYXIoJzAnK3JlbSk7IGE9cTsgfQpmb3IoaW50IGk9bS0xO2k+PTA7LS1pKSBjb3V0PDxidWZbaV07CmNvdXQ8PGVsOwp9CgpzdHJ1Y3QgUXVlcnl7IGludCBsLHIsaWQsYmw7IH07CnN0YXRpYyBib29sIGNtcFEoY29uc3QgUXVlcnkmIEEsIGNvbnN0IFF1ZXJ5JiBCKXsKaWYoQS5ibCE9Qi5ibCkgcmV0dXJuIEEuYmw8Qi5ibDsKaWYoQS5ibCYxKSByZXR1cm4gQS5yPkIucjsKcmV0dXJuIEEucjxCLnI7Cn0KCmludCBtYWluKCkKewppb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKY2luLnRpZShOVUxMKTsgICAgY291dC50aWUoTlVMTCk7CgppbnQgbixxOwpjaW4+Pm4+PnE7CnN0cmluZyBzOyBjaW4+PnM7Cgp2ZWN0b3I8aW50PiBwcmVmKG4rMSwwKTsKRk9SKGksMSxuKSBwcmVmW2ldPXByZWZbaS0xXSsoc1tpLTFdPT0nMSc/MTotMSk7Cgp2ZWN0b3I8UXVlcnk+IHFzKHEpOwppbnQgQiA9IG1heCgxLChpbnQpc3FydChuKzEpKTsKRk9SKGksMCxxLTEpewogICAgaW50IHUsdjsgY2luPj51Pj52OwogICAgcXNbaV0ubD11LTE7IHFzW2ldLnI9djsgcXNbaV0uaWQ9aTsgcXNbaV0uYmw9cXNbaV0ubC9COwp9CnNvcnQocXMuYmVnaW4oKSwgcXMuZW5kKCksIGNtcFEpOwoKaW50IEJBU0UgPSBuKzUsIE0gPSAyKihuKzUpKzc7CnZlY3RvcjxpbnQ+IGNudChNLDApOwp2ZWN0b3I8bGw+IHMxKE0sMCksIHMyKE0sMCk7CgpVMTI4IGFucygwLDApOwp2ZWN0b3I8VTEyOD4gcmVzKHEpOwoKaW50IEw9MCwgUj0tMTsKZm9yKGludCBpPTA7aTxzeihxcyk7KytpKXsKICAgIGludCBsPXFzW2ldLmwsIHI9cXNbaV0ucjsKICAgIHdoaWxlKFI8cil7CiAgICAgICAgKytSOwogICAgICAgIGludCB0ID0gcHJlZltSXSArIEJBU0U7CiAgICAgICAgbGwgbSA9IChsbCljbnRbdF07CiAgICAgICAgbGwgaWR4ID0gKGxsKVI7CiAgICAgICAgbGwgZGVsdGEgPSBzMlt0XSArIG0qaWR4KmlkeCAtIDJ1bGwqaWR4KnMxW3RdOwogICAgICAgIGFkZDY0KGFucywgZGVsdGEpOwogICAgICAgIGNudFt0XSsrOyBzMVt0XSs9aWR4OyBzMlt0XSs9aWR4KmlkeDsKICAgIH0KICAgIHdoaWxlKFI+cil7CiAgICAgICAgaW50IHQgPSBwcmVmW1JdICsgQkFTRTsKICAgICAgICBsbCBtID0gKGxsKWNudFt0XTsKICAgICAgICBsbCBpZHggPSAobGwpUjsKICAgICAgICBsbCBkZWx0YSA9IHMyW3RdICsgbSppZHgqaWR4IC0gMnVsbCppZHgqczFbdF07CiAgICAgICAgc3ViNjQoYW5zLCBkZWx0YSk7CiAgICAgICAgY250W3RdLS07IHMxW3RdLT1pZHg7IHMyW3RdLT1pZHgqaWR4OwogICAgICAgIC0tUjsKICAgIH0KICAgIHdoaWxlKEw8bCl7CiAgICAgICAgaW50IHQgPSBwcmVmW0xdICsgQkFTRTsKICAgICAgICBsbCBtID0gKGxsKWNudFt0XTsKICAgICAgICBsbCBpZHggPSAobGwpTDsKICAgICAgICBsbCBkZWx0YSA9IHMyW3RdICsgbSppZHgqaWR4IC0gMnVsbCppZHgqczFbdF07CiAgICAgICAgc3ViNjQoYW5zLCBkZWx0YSk7CiAgICAgICAgY250W3RdLS07IHMxW3RdLT1pZHg7IHMyW3RdLT1pZHgqaWR4OwogICAgICAgICsrTDsKICAgIH0KICAgIHdoaWxlKEw+bCl7CiAgICAgICAgLS1MOwogICAgICAgIGludCB0ID0gcHJlZltMXSArIEJBU0U7CiAgICAgICAgbGwgbSA9IChsbCljbnRbdF07CiAgICAgICAgbGwgaWR4ID0gKGxsKUw7CiAgICAgICAgbGwgZGVsdGEgPSBzMlt0XSArIG0qaWR4KmlkeCAtIDJ1bGwqaWR4KnMxW3RdOwogICAgICAgIGFkZDY0KGFucywgZGVsdGEpOwogICAgICAgIGNudFt0XSsrOyBzMVt0XSs9aWR4OyBzMlt0XSs9aWR4KmlkeDsKICAgIH0KICAgIHJlc1txc1tpXS5pZF09YW5zOwp9CgpGT1IoaSwwLHEtMSkgcHJpbnRVMTI4KHJlc1tpXSk7CnJldHVybiAwOwoKCn0K