#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 200003
#define LL long long
using namespace std;
int n,m,a[N],belong[N],cnt[1000003];
struct data{
int l,r,id;
}q[N];
LL as[N],ans;
int cmp(data a,data b)
{
return belong[a.l]<belong[b.l]||belong[a.l]==belong[b.l]&&a.r<b.r;
}
void change(int pos,int val)
{
int t=a[pos];
ans-=(LL)cnt[t]*cnt[t]*a[pos];
cnt[t]+=val;
ans+=(LL)cnt[t]*cnt[t]*a[pos];
}
int main()
{
freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
int block=600;
for (int i=1;i<=n;i++) belong[i]=(i-1)/block+1;
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,cmp);
ans=0;
int l=1,r=1; change(1,1);
for (int i=1;i<=m;i++) {
while (q[i].l<l) change(--l,1);
while (q[i].l>l) change(l++,-1);
while (q[i].r>r) change(++r,1);
while (q[i].r<r) change(r--,-1);
as[q[i].id]=ans;
}
for (int i=1;i<=m;i++) printf("%I64d\n",as[i]);
}