#include <bits/stdc++.h>
using namespace std;
long long n, m, l, r, b_size, p, a[200005], cnt[1000005], ans[200005];
struct qry {
  int l, r, idx;
} q, qrs[200005];
bool cmp(qry p, qry q) {
  if (p.l / b_size != q.l / b_size)
    return p.l / b_size < q.l / b_size;
  else
    return p.r < q.r;
}
void add(int idx) {
  p -= cnt[a[idx]] * cnt[a[idx]] * a[idx];
  cnt[a[idx]]++;
  p += cnt[a[idx]] * cnt[a[idx]] * a[idx];
}
void remove(int idx) {
  p -= cnt[a[idx]] * cnt[a[idx]] * a[idx];
  cnt[a[idx]]--;
  p += cnt[a[idx]] * cnt[a[idx]] * a[idx];
}
int main() {
  b_size = 448;
  scanf("%lld%lld", &n, &m);
  for (int i = 0; i < n; i++) scanf("%lld", &a[i]);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &q.l, &q.r);
    q.idx = i, q.l--, q.r--;
    qrs[i] = q;
  }
  sort(qrs, qrs + m, cmp);
  for (int i = 0; i < m; i++) {
    q = qrs[i];
    while (l < q.l) remove(l++);
    while (l > q.l) add(--l);
    while (r < q.r + 1) add(r++);
    while (r > q.r + 1) remove(--r);
    ans[q.idx] = p;
  }
  for (int i = 0; i < m; i++) printf("%lld\n", ans[i]);
  return 0;
}
