record
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,block;
struct ask{
int l,r,id;
}asks[57257];
int id[57257];
bool cmp(ask x,ask y){
if (id[x.l]==id[y.l]){
if (id[x.l]&1) return x.r<y.r;
else return x.r>y.r;
}
else return id[x.l]<id[y.l];
}
int c[57257],cnt[57257];
int ansx[57257],ansy[57257];
int nowx,nowy;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
void update(int x,int d){
cnt[x]+=d;
if (d==1&&cnt[x]>1){
nowx+=2*cnt[x]-2;
}if (d==-1&&cnt[x]>0){
nowx-=cnt[x]*2;
}
}
int main(){
scanf("%d%d",&n,&m);
block=sqrt(n);
for (int i=1;i<=n;i++) scanf("%d",&c[i]),id[i]=(i-1)*block+1;
for (int i=1;i<=m;i++){
scanf("%d%d",&asks[i].l,&asks[i].r);
asks[i].id=i;
}
sort(asks+1,asks+m+1,cmp);
for (int i=asks[1].l;i<=asks[1].r;i++) update(c[i],1);
nowy=(asks[1].r-asks[1].l+1)*(asks[1].r-asks[1].l);
ansx[asks[1].id]=nowx/gcd(nowx,nowy);
ansy[asks[1].id]=nowy/gcd(nowx,nowy);
int l=asks[1].l,r=asks[1].r;
for (int i=2;i<=m;i++){
while (l<asks[i].l) update(c[l++],-1);
while (l>asks[i].l) update(c[--l],1);
while (r>asks[i].r) update(c[r--],-1);
while (r<asks[i].r) update(c[++r],1);
nowy=(asks[i].r-asks[i].l+1)*(asks[i].r-asks[i].l);
if (!nowx) ansx[asks[i].id]=0,ansy[asks[i].id]=1;
else ansx[asks[i].id]=nowx/gcd(nowx,nowy),ansy[asks[i].id]=nowy/gcd(nowx,nowy);
}
for (int i=1;i<=m;i++) printf("%d/%d\n",ansx[i],ansy[i]);
return 0;
}