#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 114514
using namespace std;
int n,m,l=1,r=0;
int ansx[N],ansy[N],a[N],pos[N],block,cnt[N],x,y;
struct question{
int l,r,id;
bool operator<(const question &a)const{
return pos[l]==pos[a.l]?r<a.r:pos[l]<pos[a.l];
}
}q[N];
void add(int x){
cnt[a[x]]++;
if(cnt[a[x]]>1)x+=2*(cnt[a[x]]-1);
}
void del(int x){
cnt[a[x]]--;
if(cnt[a[x]]>0)x-=2*cnt[a[x]];
}
signed main(){
scanf("%d%d",&n,&m);
block=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
pos[i]=i/block;
}
for(int i=1;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+1,q+m+1);
for(int i=2;i<=m;i++){
while(q[i].l<l)add(--l);
while(q[i].r>r)add(++r);
while(q[i].l>l)del(l++);
while(q[i].r<r)del(r--);
if(q[i].l==q[i].r){
ansx[q[i].id]=0;
ansy[q[i].id]=1;
continue;
}
y=(q[i].r-q[i].l+1)*(q[i].r-q[i].l);
int d=__gcd(x,y);
x/=d,y/=d;
ansx[q[i].id]=x;
ansy[q[i].id]=y;
}
for(int i=1;i<=m;i++)printf("%d/%d\n",ansx[i],ansy[i]);
return 0;
}