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

typedef long long ll;

const ll p = 1000000007;

ll fast_pow_mod(ll base, ll exp, ll p) {
	if (base == 0) return 0;
	else if (exp == 0 || base == 1) return 1;
	
	ll result = 1;
	while (exp > 0) {
		if (exp & 1) {
			result = (result * base) % p;  
		}
		base = (base * base) % p;
		exp >>= 1;
	}
	return result;	
} 
//类似于前缀和
int main() {
	int n, q;
	cin >> n >> q;
	ll a[n + 1], tmp;
	a[0] = 1;
	for(int i = 1; i <= n; i++) {
		cin >> tmp;
		a[i] = (a[i - 1] * tmp) % p; 
	}
	int left, right;
	while (q-- > 0) {
		cin >> left >> right;
		//a[right] * (a[left] ^ -1)同余 
		ll base = a[right] % p;
		ll inverse = fast_pow_mod(a[left - 1], p - 2, p);
		cout << (base * inverse) % p << " ";
	}
}