#include <cstdio>
#include <algorithm>
#define maxn 200005
#define maxa 1000000
int n, m, belong[500], a[maxn], cnt[maxa];
long long anss, ans[maxn];
struct Q{
int l, r, id;
}q[maxn];
inline bool cmp(Q x, Q y){
return belong[x.l] == belong[y.l] ? x.r < y.r : belong[x.l] < belong[y.l];
}
inline void add(int k){
anss += cnt[a[k]]++ * 2 * a[k] + a[k];
// printf("%d %d %d\n", a[k], cnt[a[k]], anss);
}
inline void sub(int k){
anss -= cnt[a[k]]-- * 2 * a[k] - a[k];
}
int main(){
scanf("%d %d", &n, &m);
int block = sqrt((n<<1)/3);
for(int i = 1; i <= n; i++){
scanf("%d", &a[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;
}
std :: sort(q + 1, q + m + 1, cmp);
int lt = 1, rt = 0;
for(int i = 1; i <= m; i++){
while(lt < q[i].l) sub(lt++);
while(lt > q[i].l) add(--lt);
while(rt < q[i].r) add(++rt);
while(rt > q[i].r) sub(rt--);
ans[q[i].id] = anss;
}
for(int i = 1; i <= m; i++){
printf("%lld\n", ans[i]);
}
return 0;
}
开long long
了阿,第六个点死了。