#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
struct q{
int l,r,id;
ull Ans;
}qu[200010];
ull quei[200010],sum[200010],a[200010],ans,n,m;
void md(int x,int add){
ans-=sum[a[x]]*sum[a[x]]*a[x];
sum[a[x]]+=add;
ans+=sum[a[x]]*sum[a[x]]*a[x];
}
void Mo(){
for(int i=1,lct=1,rct=0;i<=m;i++){
for(;rct<qu[i].r;rct++)
md(rct+1,1);
for(;rct>qu[i].r;rct--)
md(rct,-1);
for(;lct<qu[i].l;lct++)
md(lct,-1);
for(;lct>qu[i].l;lct--)
md(lct-1,1);
qu[i].Ans=ans;
}
}
bool cmp(const q &A,const q &B){
return quei[A.l]==quei[B.l]?A.r<B.r:A.l<B.l;
}
bool ids(const q &x,const q &y){
return x.id<y.id;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++){
cin>>qu[i].l>>qu[i].r;
qu[i].id=i;
}
int qrn=sqrt(n);
for(int i=1;i<=n;i++)
quei[i]=(i-1)/qrn+1;
sort(qu+1,qu+m+1,cmp);
Mo();
sort(qu+1,qu+m+1,ids);
for(int i=1;i<=m;i++)
cout<<qu[i].Ans<<endl;
return 0;
}