#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int id,l,r,A,B;
}ans[50009];
int ar[50009];
int len;
int gcd(int a,int b){
return (b==0?a:b%a);
}
bool cmp(node a,node b){
if(a.l/len==b.l/len){
return a.l<b.l;
}
return a.l/len<b.l/len;
}
bool cmp1(node a,node b){
return a.id<b.id;
}
int sum[50009];
int now=0;
void add(int i){
now-=sum[ar[i]]*(sum[ar[i]]-1);
sum[ar[i]]++;
now+=sum[ar[i]]*(sum[ar[i]]-1);
}
void del(int i){
now-=sum[ar[i]]*(sum[ar[i]]-1);
sum[ar[i]]--;
now+=sum[ar[i]]*(sum[ar[i]]-1);
}
main(){
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> ar[i];
}
len=sqrt(n);
for(int i=0;i<m;i++){
cin >> ans[i].l >> ans[i].r;
ans[i].id=i;
}
sort(ans,ans+m,cmp);
int l=0,r=0;
for(int i=0;i<m;i++){
if(ans[i].l==ans[i].r){
ans[i].A=0,ans[i].B=1;
continue;
}
while(l<ans[i].l)del(l++);
while(l>ans[i].l)add(l--);
while(r<ans[i].r)add(r++);
while(r>ans[i].r)del(r--);
int temp=gcd((r-l+1)*(r-l+1),now);
ans[i].A=now/temp;
ans[i].B=(r-l+1)*(r-l+1)/temp;
}
sort(ans,ans+m,cmp1);
for(int i=0;i<m;i++){
cout << ans[i].A << "/" << ans[i].B;
cout << endl;
}
return 0;
}