#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6 + 7;
int n, m;
int sz;
int a[MAXN];
long long ans[MAXN];
long long sum[MAXN];
struct node {
  int l, r, id;
  bool operator<(const node &t) const {
    if (l / sz == t.l / sz) return r < t.r;
    return l < t.l;
  }
} q[MAXN];
int L = 1, R = 0;
long long Sum = 0;
void update(int x, int add) {
  Sum -= sum[a[x]] * sum[a[x]] * a[x];
  sum[a[x]] += add;
  Sum += sum[a[x]] * sum[a[x]] * a[x];
}
int main() {
  cin >> n >> m;
  sz = sqrt(n);
  for (long long i = 1; i < n + 1; i++) scanf("%d", a + i);
  for (long long i = 0; i < m; i++) {
    scanf("%d%d", &q[i].l, &q[i].r);
    q[i].id = i;
  }
  sort(q, q + m);
  for (long long i = 0; i < m; i++) {
    while (L < q[i].l) update(L++, -1);
    while (L > q[i].l) update(--L, 1);
    while (R < q[i].r) update(++R, 1);
    while (R > q[i].r) update(R--, -1);
    ans[q[i].id] = Sum;
  }
  for (long long i = 0; i < m; i++) printf("%I64d\n", ans[i]);
  return 0;
}
