#include <bits/stdc++.h>
using namespace std;
long long block;
long long m[2000000];
long long a[2000000];
struct query {
  long long l, r, idx;
};
long long value = 0;
bool comper(query a, query b) {
  if (a.l / block != b.l / block) return a.l < b.l;
  return a.l / block % 2 ? a.r < b.r : a.r > b.r;
}
void add(long long pos) {
  long long val = a[pos];
  long long kval = m[val];
  long long curkval = ++m[val];
  value -= (val * kval * kval);
  value += (val * curkval * curkval);
}
void remove(long long pos) {
  long long val = a[pos];
  long long kval = m[val];
  long long curkval = --m[val];
  value -= (val * kval * kval);
  value += (val * curkval * curkval);
}
int main(void) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long n, q;
  cin >> n >> q;
  block = sqrt(n);
  for (int i = 1; i < n + 1; i++) cin >> a[i];
  query qr[q];
  for (int i = 0; i < q; i++) cin >> qr[i].l >> qr[i].r, qr[i].idx = i;
  sort(qr, qr + q, comper);
  set<long long> s;
  long long L = 1, R = 1, ml = 0, mr = 0;
  long long ans[q];
  for (long long i = 0; i < q; i++) {
    long long L = qr[i].l;
    long long R = qr[i].r;
    while (mr < R) mr++, add(mr);
    while (ml > L) ml--, add(ml);
    while (ml < L) remove(ml), ml++;
    while (mr > R) remove(mr), mr--;
    ans[qr[i].idx] = value;
  }
  for (int i = 0; i < q; i++) cout << ans[i] << "\n";
}
