记得开long long
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
const int N = 1e5+10;
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
struct node
{
int l,r,id;
}arr[N];
int c[N],block,color[N];
ll sum,q[N],p[N];
bool operator<(const node a,const node b)
{
return((a.l-1)/block+1==(b.l-1)/block+1)?a.r<b.r:a.l<b.l;
}
void change(int x,int add)
{
sum += (ll)add*2*color[x]+1;
color[x] += add;
}
int main()
{
int n,m;scanf("%d%d",&n,&m);
block = sqrt(n);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&arr[i].l,&arr[i].r);
arr[i].id = i;
}
sort(arr+1,arr+1+m);
int l=1,r=0;sum=0;
for(int i=1;i<=m;i++)
{
int ql = arr[i].l , qr = arr[i].r;
while(r<qr)
change(c[++r],1);
while(l>ql)
change(c[--l],1);
while(l<ql)
change(c[l++],-1);
while(r>qr)
change(c[r--],-1);
if(l==r)
{
q[arr[i].id] = 0 ,p[arr[i].id] = 1;
continue;
}
int lon = arr[i].r - arr[i].l +1;
q[arr[i].id] = sum-lon;
p[arr[i].id] = (ll)lon*(lon-1);
ll k = gcd(q[arr[i].id],p[arr[i].id]);
q[arr[i].id]/=k;
p[arr[i].id]/=k;
}
for(int i=1;i<=m;i++)
printf("%lld/%lld\n",q[i],p[i]);
return 0;
}