#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long zeros[100000 + 342], ones[100000 + 342];
long long add(long long a, long long b) { return (a + b) % mod; }
long long sub(long long a, long long b) {
  return ((a % mod) - (b % mod) + mod) % mod;
}
long long mul(long long a, long long b) {
  return ((a % mod) * (b % mod)) % mod;
}
long long poww(long long a, long long b) {
  if (b == 0LL) {
    return 1;
  }
  long long aa = poww(a, b / 2LL);
  aa = mul(aa, aa);
  if (b % 2LL == 1LL) {
    aa = mul(aa, a);
  }
  return aa;
}
int main() {
  ios::sync_with_stdio(false);
  int n, q;
  string str;
  cin >> n >> q;
  cin >> str;
  for (int i = 0; i < str.length(); i++) {
    if (str[i] == '0') {
      zeros[i + 1]++;
    } else {
      ones[i + 1]++;
    }
    zeros[i + 1] += zeros[i];
    ones[i + 1] += ones[i];
  }
  while (q--) {
    int l, r;
    cin >> l >> r;
    long long no_of_ones = ones[r] - ones[l - 1];
    long long no_of_zeros = zeros[r] - zeros[l - 1];
    long long byone = poww(2LL, no_of_ones), byzero, mlplr, ans;
    byone = sub(byone, 1);
    byzero = byone;
    mlplr = sub(poww(2LL, no_of_zeros), 1);
    byzero = mul(byzero, mlplr);
    cout << add(byone, byzero) << "\n";
  }
  return 0;
}
