#include<bits/stdc++.h>
#define lp (p*2)
#define rp (p*2+1)
#define G t[p].lz
#define ll long long
#define csp c[s[p]]
using namespace std;
const ll N=5e5+50;
struct query{
ll l,r,id;
}Q[N];
struct answer{
ll deno,nume;
}ans[N];
ll n,m,sum,len;
ll s[N],c[N],in[N];
bool cmpQ(query x,query y){
if(in[x.l]==in[y.l])return x.r<y.r;
return (x.l)<(y.l);
}
void add(ll p){
sum+=2*(csp);
csp++;
}
void remove(ll p){
if(csp>=2)sum-=2*(csp-1);
csp--;
}
ll gcd(ll a,ll b){
if(a==0)return b;
return gcd(b%a,a);
}
signed main(){
freopen("P1494_1.in","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
len=n/sqrt(n);
for(ll i=1;i<=n;i++)cin>>s[i],in[i]=(i-1)/len+1;
for(ll i=1;i<=m;i++)cin>>Q[i].l>>Q[i].r,Q[i].id=i;
sort(Q+1,Q+m+1,cmpQ);
ll L=1,R=0;
for(ll i=1;i<=m;i++){
if(Q[i].l==Q[i].r){
ans[i].deno=1,ans[i].nume=0;
continue;
}
while(L>Q[i].l)add(--L);
while(R<Q[i].r)add(++R);
while(L<Q[i].l)remove(L++);
while(R>Q[i].r)remove(R--);
ans[Q[i].id].deno=(R-L+1)*(R-L);
ans[Q[i].id].nume=sum;
}
for(ll i=1;i<=m;i++){
if(ans[i].nume){
ll g=__gcd(ans[i].nume,ans[i].deno);
ans[i].nume/=g;
ans[i].deno/=g;
}
else ans[i].deno=1;
cout<<ans[i].nume<<"/"<<ans[i].deno<<"\n";
}
}