#include <iostream>
#include <vector>
using namespace std;

const int M=1e9+7;

long long kpow(long long a,long long x){        //快速幂
    long long res=1;
    a%=M;
    while(x){
        if(x%2) res=(res*a)%M;
        a=(a*a)%M;
        x>>=1;
    }
    return res;
}

int main() {
    int n, q;
    long long a;
    cin>>n>>q;
    vector<long long> s(n+1, 1);
    for(int i=1;i<=n;i++){
        cin>>a;
        s[i]=(s[i-1]*a)%M;                      //前缀积
    }

    int l,r;
    while(q--){
        cin>>l>>r;
        cout<<(s[r]*kpow(s[--l], M-2))%M<<" ";  //费马小定理 求逆元
    }
}