#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<<" "; //费马小定理 求逆元
}
}

京公网安备 11010502036488号