#include <bits/stdc++.h>
using namespace std;
long long sq;
struct Z {
  int l, r, pos;
  bool operator<(const Z& A) const {
    if (l / sq == A.l / sq) return r < A.r;
    return l / sq < A.l / sq;
  }
} q[200009];
long long arr[200009];
long long res;
long long M[1000009];
void add(int pos) {
  if (pos <= 0) return;
  res += (2ll * (M[arr[pos]]++) + 1) * arr[pos];
}
void remove(int pos) {
  if (pos <= 0) return;
  res -= (2ll * (M[arr[pos]]--) - 1) * arr[pos];
}
long long ans[200009];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  int i, j, k;
  int n, num;
  string str;
  int t;
  scanf("%d %d", &n, &t);
  res = 0ll;
  sq = sqrt(n + 1) + 1;
  for (i = 1; i <= n; i++) scanf("%lld", &arr[i]);
  for (i = 0; i < t; i++) {
    scanf("%lld %lld", &q[i].l, &q[i].r);
    q[i].pos = i;
  }
  sort(q, q + t);
  int cl = 0, cr = 0;
  for (i = 0; i < t; i++) {
    while (cl + 1 < q[i].l) {
      remove(++cl);
    }
    while (cl >= q[i].l) {
      add(cl--);
    }
    while (cr + 1 <= q[i].r) {
      add(++cr);
    }
    while (cr > q[i].r) remove(cr--);
    cr = q[i].r;
    cl = q[i].l - 1;
    ans[q[i].pos] = res;
  }
  for (i = 0; i < t; i++) printf("%lld\n", ans[i]);
  return 0;
}
