func_code_string: #include <bits/stdc++.h>   using namespace std;   inline void read(int &a) {     a = 0;     int c = getchar(), b = 1;     while (c >  9  || c <  0 ) {       if (c ==  - ) b = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) a = (a << 3) + (a << 1) + c - 48, c = getchar();     a *= b;   }   inline int Rem() {     int a = 0, c = getchar(), b = 1;     while (c >  9  || c <  0 ) {       if (c ==  - ) b = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) a = (a << 3) + (a << 1) + c - 48, c = getchar();     return a *= b;   }   inline void write(long long x) {     if (x > 9) write(x / 10);     putchar( 0  + x % 10);   }   inline void W(long long x) {     if (x < 0) {       putchar( - ), x = -x;     }     write(x);   }   const int N = 2e5 + 5, M = 1e6 + 5;   int n, m, a[N], pos[N], block;   long long ans, rec[N], cnt[M];   struct node {     int l, r, id;   } q[N];   inline bool cmp(node a, node b) {     return (pos[a.l] == pos[b.l]) ? (pos[a.l] & 1 ? a.r < b.r : a.r > b.r)                                   : a.l < b.l;   }   inline void add(int x) {     cnt[x]++;     ans += ((cnt[x] * cnt[x]) - ((cnt[x] - 1) * (cnt[x] - 1))) * x;   }   inline void del(int x) {     ans -= ((cnt[x] * cnt[x]) - ((cnt[x] - 1) * (cnt[x] - 1))) * x;     cnt[x]--;   }   int main() {     read(n);     read(m);     block = sqrt(n);     for (register int i = 1; i <= n; i++) read(a[i]), pos[i] = i / block;     for (register int i = 1; i <= m; i++) {       read(q[i].l);       read(q[i].r);       q[i].id = i;     }     sort(q + 1, q + 1 + m, cmp);     for (register int i = 1, ql, qr, l = 1, r = 0; i <= m; i++) {       ql = q[i].l, qr = q[i].r;       while (ql < l) add(a[--l]);       while (ql > l) del(a[l++]);       while (qr < r) del(a[r--]);       while (qr > r) add(a[++r]);       rec[q[i].id] = ans;     }     for (register int i = 1; i <= m; i++) W(rec[i]), putchar(  n );     return 0;   }   