#include <bits/stdc++.h>
using namespace std;
char ch[1000010];
int num[1000010];
int pre[1000010];
const long long mod = 1e9 + 7;
int qpow(int a, int b) {
  long long ans = 1;
  long long ta = a, tb = b;
  while (tb) {
    if (tb & 1) ans = ans * ta % mod;
    tb >>= 1;
    ta = ta * ta % mod;
  }
  return (int)(ans % mod);
}
int solve(int l, int r) {
  int len = r - l + 1;
  int n = pre[r] - pre[l - 1];
  long long ans = (mod + qpow(2, n) - 1) % mod;
  long long tmp = (qpow(2, len - n) - 1 + mod) % mod * ans % mod;
  ans = (ans + tmp) % mod;
  return (int)ans;
}
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  scanf("%s", ch + 1);
  for (int i = 1; i <= n; i++) {
    num[i] = ch[i] - '0';
    pre[i] = pre[i - 1] + num[i];
  }
  int l, r;
  for (int i = 0; i < q; i++) {
    scanf("%d%d", &l, &r);
    printf("%d\n", solve(l, r));
  }
  return 0;
}
