#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
const int MAX_A = 1e6 + 5;
const int B = 447; // sqrt(N)
const int Q = 2e5 + 5;
struct query {
int l, r, idx;
bool operator<(const query& other) const {
if (l / B == other.l / B) {
return (l / B & 1) ? (r > other.r) : (r < other.r);
}
return (l < other.l);
}
};
int n, q;
int a[N];
vector<query> queries;
ll cur_ans; // biến toàn cục lưu đáp án
ll ans[Q]; // ans[i] = đáp án cho truy vấn thứ i
int cnt[MAX_A]; // cnt[val] = số lần xuất hiện của val
void add(int i) { // a[i]
cur_ans -= 1ll * cnt[a[i]] * cnt[a[i]] * a[i];
cnt[a[i]]++;
cur_ans += 1ll * cnt[a[i]] * cnt[a[i]] * a[i];
}
void remove(int i) {
cur_ans -= 1ll * cnt[a[i]] * cnt[a[i]] * a[i];
cnt[a[i]]--;
cur_ans += 1ll * cnt[a[i]] * cnt[a[i]] * a[i];
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 0; i < q; i++) {
int l, r;
cin >> l >> r;
queries.push_back({l, r, i});
}
sort(queries.begin(), queries.end());
int cur_l = 1, cur_r = 0;
for (query q : queries) {
while (cur_l > q.l) {
cur_l--;
add(cur_l);
}
while (cur_l < q.l) {
remove(cur_l);
cur_l++;
}
while (cur_r < q.r) {
cur_r++;
add(cur_r);
}
while (cur_r > q.r) {
remove(cur_r);
cur_r--;
}
ans[q.idx] = cur_ans;
}
for (int i = 0; i < q; i++) cout << ans[i] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDJlNSArIDU7IApjb25zdCBpbnQgTUFYX0EgPSAxZTYgKyA1OyAKY29uc3QgaW50IEIgPSA0NDc7IC8vIHNxcnQoTikKY29uc3QgaW50IFEgPSAyZTUgKyA1OyAKCnN0cnVjdCBxdWVyeSB7CglpbnQgbCwgciwgaWR4OyAKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IHF1ZXJ5JiBvdGhlcikgY29uc3QgewoJCWlmIChsIC8gQiA9PSBvdGhlci5sIC8gQikgewoJCQlyZXR1cm4gKGwgLyBCICYgMSkgPyAociA+IG90aGVyLnIpIDogKHIgPCBvdGhlci5yKTsgIAoJCX0gCgkJcmV0dXJuIChsIDwgb3RoZXIubCk7IAoJfQp9OwoKaW50IG4sIHE7IAppbnQgYVtOXTsgCnZlY3RvcjxxdWVyeT4gcXVlcmllczsgCgpsbCBjdXJfYW5zOyAvLyBiaeG6v24gdG/DoG4gY+G7pWMgbMawdSDEkcOhcCDDoW4KbGwgYW5zW1FdOyAvLyBhbnNbaV0gPSDEkcOhcCDDoW4gY2hvIHRydXkgduG6pW4gdGjhu6kgaSAKaW50IGNudFtNQVhfQV07IC8vIGNudFt2YWxdID0gc+G7kSBs4bqnbiB4deG6pXQgaGnhu4duIGPhu6dhIHZhbAoKdm9pZCBhZGQoaW50IGkpIHsgLy8gYVtpXQoJY3VyX2FucyAtPSAxbGwgKiBjbnRbYVtpXV0gKiBjbnRbYVtpXV0gKiBhW2ldOyAKCWNudFthW2ldXSsrOyAgIAoJY3VyX2FucyArPSAxbGwgKiBjbnRbYVtpXV0gKiBjbnRbYVtpXV0gKiBhW2ldOyAKfQoKdm9pZCByZW1vdmUoaW50IGkpIHsKCWN1cl9hbnMgLT0gMWxsICogY250W2FbaV1dICogY250W2FbaV1dICogYVtpXTsgCgljbnRbYVtpXV0tLTsgCgljdXJfYW5zICs9IDFsbCAqIGNudFthW2ldXSAqIGNudFthW2ldXSAqIGFbaV07IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gcTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCglmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewoJCWludCBsLCByOyAKCQljaW4gPj4gbCA+PiByOyAKCQlxdWVyaWVzLnB1c2hfYmFjayh7bCwgciwgaX0pOyAKCX0KCglzb3J0KHF1ZXJpZXMuYmVnaW4oKSwgcXVlcmllcy5lbmQoKSk7ICAKCglpbnQgY3VyX2wgPSAxLCBjdXJfciA9IDA7IAoJCglmb3IgKHF1ZXJ5IHEgOiBxdWVyaWVzKSB7CgkJd2hpbGUgKGN1cl9sID4gcS5sKSB7CgkJCWN1cl9sLS07IAoJCQlhZGQoY3VyX2wpOyAKCQl9CgoJCXdoaWxlIChjdXJfbCA8IHEubCkgewoJCQlyZW1vdmUoY3VyX2wpOyAKCQkJY3VyX2wrKzsgCgkJfQoKCQl3aGlsZSAoY3VyX3IgPCBxLnIpIHsKCQkJY3VyX3IrKzsgCgkJCWFkZChjdXJfcik7IAoJCX0KCgkJd2hpbGUgKGN1cl9yID4gcS5yKSB7CgkJCXJlbW92ZShjdXJfcik7IAoJCQljdXJfci0tOyAKCQl9CgoJCWFuc1txLmlkeF0gPSBjdXJfYW5zOyAKCX0KCglmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsgCn0=