#include<bits/stdc++.h>
using namespace std;
const int N = 200010,M = 1e6+10;
unsigned long long a[N],cnt[M],ans[N],ANS,n,m,bl,b[N];
inline unsigned long long read(){
unsigned long long x=0;
bool f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=0;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return f?x:-x;
}
struct Q{
int l;
int r;
int id;
}q[N];
bool cmp(Q x,Q y){
return b[x.l] == b[y.l] ? x.r < y.r : x.l < y.l;
}
void add(int x){
ANS-=cnt[a[x]]*cnt[a[x]]*a[x];
cnt[a[x]]++;
ANS+=cnt[a[x]]*cnt[a[x]]*a[x];
}
void del(int x){
ANS-=cnt[a[x]]*cnt[a[x]]*a[x];
cnt[a[x]]--;
ANS+=cnt[a[x]]*cnt[a[x]]*a[x];
}
int main(){
n=read();
m=read();
bl=sqrt(n);
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<=m;i++){
q[i].l=read();
q[i].r=read();
q[i].id=i;
}
for(int i=1;i<=n;i++){
b[i]=(i-1)/bl+1;
}
sort(q+1,q+m+1,cmp);
int L=1,R=0;
for(int i=1;i<=m;i++){
while(L<q[i].l) del(L++);
while(L>q[i].l) add(--L);
while(R<q[i].r) add(++R);
while(R>q[i].r) del(R--);
ans[q[i].id]=ANS;
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<endl;
}
return 0;
}