#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=5e4+5;
inline int read(){
int ans=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
ans=(ans<<3)+(ans<<1)+(ch&15);
ch=getchar();
}
return ans*f;
}
inline void p(int m){
if(m/10)p(m/10);
putchar(m%10+'0');
}
int n,m,s[maxn];
struct question{
int l,r,a,b,id;
}q[maxn];
int belong[maxn],c[maxn];
inline bool cmp(question a,question b){
return (belong[a.l]^belong[b.l]) ? belong[a.l]<belong[b.l] : ((belong[a.l]&1) ? a.r<b.r : a.r>b.r);
}
inline bool cmp1(question a,question b){
return a.id<b.id;
}
inline int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
inline void fs(int a,int b){
if(!a)printf("0/1\n");
else {
int c=gcd(a,b);
printf("%d/%d\n",a/c,b/c);
}
return;
}
int main(){//putchar('\n');
n=read();m=read();
int size=sqrt(n);
int bnum=ceil((double)n/size);
for(int i=1;i<=bnum;i++)
for(int j=(i-1)*size+1;j<=i*size;j++)
belong[j]=i;
for(int i=1;i<=n;i++)
s[i]=read();
for(int i=1;i<=m;i++){
q[i].l=read();
q[i].r=read();
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int ans=0;
for(int j=1,l=1,r=0;j<=m;j++){
int ql=q[j].l,qr=q[j].r;
while(ql<l){
l--;
ans=ans+((c[s[l]]<<1)|1);
c[s[l]]++;
}
while(ql>l){
ans=ans-(c[s[l]]<<1)+1;
c[s[l]]--;
l++;
}
while(qr<r){
ans=ans-(c[s[r]]<<1)+1;
c[s[l]]--;
r--;
}
while(qr>r){
r++;
ans=ans+((c[s[r]]<<1)|1);
c[s[r]]++;
}
if(q[j].l==q[j].r)
q[j].a=0,q[j].b=1;
else {
q[j].a=ans-r+l-1;
q[j].b=(r-l+1)*(r-l);
}
}
sort(q+1,q+m+1,cmp1);
for(int i=1;i<=m;i++)
fs(q[i].a,q[i].b);
return 0;
}
/*
车
马 车
*/