#include <bits/stdc++.h>
#define int long long
const int N = 310;
const int TT = 1e9 + 7;
using namespace std;
int T;
int n, q;
int a[N];
int b[N];
int A[N][N];
inline int read() {
int ret = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
ret = ret * 10 + (ch & 15), ch = getchar();
return ret * f;
}
inline int gcd(int x, int y) {
if (!x)
return y;
if (!y)
return x;
int t = __builtin_ctzll(x | y);
x >>= __builtin_ctzll(x);
while (y) {
y >>= __builtin_ctzll(y);
if (x > y)
swap(x, y);
y -= x;
}
return x << t;
}
void _solve() {
n = read(), q = read();
for (int i = 1; i <= n; i++)
a[i] = read();
for (int r = 1; r <= n; r++) {
A[r][r] = a[r] % TT;
b[r] = a[r];
int prod_d = 1;
for (int i = r - 1; i >= 1; i--) {
int d_i = gcd(b[i], a[r] / prod_d);
prod_d *= d_i;
b[i] /= d_i;
}
for (int i = r - 1; i >= 1; i--)
A[i][r] = A[i + 1][r] * (b[i] % TT) % TT;
}
while (q--) {
int l = read(), r = read();
printf("%lld\n", A[l][r]);
}
}
signed main() {
T = read();
while (T--)
_solve();
return 0;
}