#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e4 + 5, sqrtN = 3e2 + 5;
int n, m, a[N], to[N], S, L[sqrtN], R[sqrtN], f[sqrtN][N], cnt, g[sqrtN][sqrtN], sum[N], tot, l, r, ll, rr, ans, len, mot, GCD;
int vis[N];
inline int get(int L, int R, int col){
return f[R][col] - f[L - 1][col];
}
signed main(){
scanf("%lld%lld", &n, &m);
for(int i = 1; i <= n; i++) scanf("%lld", &a[i]);
S = sqrt(n);
for(int i = 1; i <= n; i++){
if(i % S == 1){
to[i] = ++cnt;
L[cnt] = R[cnt] = i;
}
else{
R[to[i] = cnt] = i;
}
}
for(int i = 1; i <= cnt; i++){
for(int j = 1; j <= n; j++) f[i][j] = f[i - 1][j];
for(int j = L[i]; j <= R[i]; j++){
f[i][a[j]]++;
}
}
for(int i = 1; i <= cnt; i++){
tot = 0ll;
for(int j = 1; j <= n; j++) sum[j] = 0;
for(int j = i; j <= cnt; j++){
for(int k = L[j]; k <= R[j]; k++){
tot += sum[a[k]];
sum[a[k]]++;
}
g[i][j] = tot;
}
}
while(m--){
scanf("%lld%lld", &l, &r);
if(l == r){
printf("0/1\n");
continue ;
}
mot = (r - l + 1) * (r - l) / 2;
ll = to[l];
if(L[ll] < l) ll++;
rr = to[r];
if(R[rr] > r) rr--;
ans = 0ll;
if(ll <= rr) ans = g[ll][rr];
for(int i = L[ll] - 1; i >= l; i--){
ans += vis[a[i]];
vis[a[i]]++;
ans += get(ll, rr, a[i]);
}
for(int i = R[rr] + 1; i <= r; i++){
ans += vis[a[i]];
vis[a[i]]++;
ans += get(ll, rr, a[i]);
}
for(int i = L[ll] - 1; i >= l; i--) vis[a[i]] = 0;
for(int i = R[rr] + 1; i <= r; i++) vis[a[i]] = 0;
GCD = __gcd(ans, mot);
ans /= GCD, mot /= GCD;
printf("%lld/%lld\n", ans, mot);
}
return 0;
}