#include <iostream>
#include <algorithm>
#include <utility>
#include <cmath>
#define int long long
using namespace std;
inline int read()
{
int ans = 0, f = 0;
char c = getchar();
while (!isdigit(c))
f |= (c == '-'), c = getchar();
while (isdigit(c))
ans = (ans << 3) + (ans << 1) + c - 48, c = getchar();
return f ? -ans : ans;
}
void write(int x)
{
if (x < 0)
putchar('-'), x = -x;
if (x > 9)
write(x / 10);
putchar(48 + x % 10);
}
constexpr int N = 5e4 + 5;
int n, Q, k, a[N];
int ans, sq, mp[N];
struct question
{
int l, r, id;
bool operator<(const question &x) const
{
if (l / sq != x.l / sq)
return l / sq < x.l / sq;
if (l / sq & 1)
return r < x.r;
return r > x.r;
}
} q[N];
pair<int, int> res[N];
inline void add(int x)
{
if (mp[x] > 0)
ans -= mp[x] * (mp[x] - 1);
++mp[x];
ans += mp[x] * (mp[x] - 1);
}
inline void del(int x)
{
ans -= mp[x] * (mp[x] - 1);
--mp[x];
if (mp[x] > 0)
ans += mp[x] * (mp[x] - 1);
}
signed main()
{
n = read(), Q = read();
for (int i = 1; i <= n; ++i)
a[i] = read();
for (int i = 1; i <= Q; ++i)
q[i].l = read(), q[i].r = read(), q[i].id = i;
sq = sqrt(n);
sort(q + 1, q + Q + 1);
int l = q[1].l, r = q[1].r;
for (int i = l; i <= r; ++i)
add(a[i]);
res[q[1].id].first = ans;
if (q[1].l == q[1].r)
res[q[1].id].first = 0;
res[q[1].id].second = (q[1].r - q[1].l + 1) * (q[1].r - q[1].l) / 2;
for (int i = 2; i <= Q; ++i)
{
while (l < q[i].l)
del(a[l++]);
while (l > q[i].l)
add(a[--l]);
while (r < q[i].r)
add(a[++r]);
while (r > q[i].r)
del(a[r--]);
res[q[i].id].first = ans;
if (q[i].l == q[i].r)
res[q[i].id].first = 0;
res[q[i].id].second = (q[i].r - q[i].l + 1) * (q[i].r - q[i].l);
}
for (int i = 1; i <= Q; ++i)
if (res[i].first == 0)
puts("0/1");
else
{
int gcd = __gcd(res[i].first, res[i].second);
res[i].first /= gcd;
res[i].second /= gcd;
write(res[i].first);
putchar('/');
write(res[i].second);
putchar('\n');
}
return 0;
}