#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
#ifdef ONLINE_JUDGE
#define lld I64d
#endif
typedef long long ll;
const int MAX = 50007;
int a[MAX];
int sum[2][MAX];
inline int lb(int& x) {
return x & (-x);
}
int query(int id, int x) {
int s = 0;
while (x > 0) {
s += sum[id][x];
x -= lb(x);
}
return s;
}
void modify(int id, int x, int ad) {
while (x < MAX) {
sum[id][x] += ad;
x += lb(x);
}
}
inline ll gao1gao(ll x) {
return x * (x - 1) * (x - 2) / 6;
}
inline void read(int& x) {
char c;
while ((c = getchar()) < '0' || c > '9');
x = c - '0';
while ((c = getchar()) >= '0' && c <= '9') {
x = (x << 1) + (x << 3) + c - '0';
}
}
int main() {
int T;
read(T);
while (T--) {
int n, m;
read(n);
read(m);
memset(sum, 0, sizeof(sum));
for (int i = 1; i <= n; ++i) {
read(a[i]);
}
int u, v;
for (int i = 1; i <= m; ++i) {
read(u);
read(v);
modify(0, v, 1);
modify(1, u, 1);
}
ll ans = 0LL;
for (int i = 1; i <= n; ++i) {
ans += gao1gao(query(1, i) - query(0, i - 1)) * a[i];
}
if (ans == 0) {
puts("0");
continue;
}
ll y = gao1gao(m);
ll gcd = __gcd(ans, y);
ans /= gcd;
y /= gcd;
if (y == 1LL) {
printf("%lld\n", ans);
} else {
printf("%lld/%lld\n", ans, y);
}
}
return 0;
}