#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
int n,m,t,c[N],b[505];
long long ans,num[N];
pair<long long,long long> hd[N];
struct jgt
{
int l,r,id;
}q[N];
bool cmp(jgt x,jgt y)
{
if(b[x.l]==b[y.l])
return x.r<y.r;
return x.l<y.l;
}
long long gcd(long long a,long long b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
void xg(int color,int k)
{
ans-=num[color]*(num[color]-1)/2;
num[color]+=k;
ans+=num[color]*(num[color]-1)/2;
}
void solve()
{
for(int i=1,l=1,r=0;i<=m;i++)
{
jgt j=q[i];
while(l<j.l) xg(c[l++],-1);
while(l>j.l) xg(c[--l],1);
while(r<j.r) xg(c[++r],1);
while(r>j.r) xg(c[r--],-1);
if(j.l==j.r)
hd[j.id]={0,1};
else
{
long long zfa=(j.r-j.l+1)*(j.r-j.l)/2,gy=gcd(ans,zfa);
hd[j.id]={ans/gy,zfa/gy};
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
for(int i=1;i<=m;i++)
scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
t=sqrt(n);
for(int i=1;i<=n;i++)
b[i]=(i-1)/t+1;
sort(q+1,q+m+1,cmp);
solve();
for(int i=1;i<=m;i++)
printf("%lld/%lld\n",hd[i].first,hd[i].second);
return 0;
}