#include <bits/stdc++.h>
using namespace std;
const long long maxN = 2e5 + 5, MOD = 1e9 + 7, INF = 1e9 + 1;
int n, q, m, h, l, A[maxN];
int acum[maxN];
long long fastPow(long long x, long long n) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * x % MOD;
    n >>= 1, x = x * x % MOD;
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  cin >> n >> q;
  for (int i = int(1); i < int(n + 1); i++) {
    char c;
    cin >> c;
    acum[i] = acum[i - 1];
    if (c == '0') {
      acum[i]++;
    }
  }
  int a, b;
  while (q--) {
    cin >> a >> b;
    int tot = b - a + 1;
    int ceros = acum[b] - acum[a - 1];
    long long ans = (fastPow(2, tot) + MOD - 1) % MOD;
    ans -= (fastPow(2, ceros) + MOD - 1) % MOD;
    ans += MOD;
    ans %= MOD;
    cout << ans << '\n';
  }
  return 0;
}
