func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 7;   int n, m, B, a[N], c[N], ans[N];   struct Node {     int l, r, id;     Node() {}     Node(int _l, int _r, int _id) { l = _l, r = _r, id = _id; }     bool operator<(const Node &p) const { return r < p.r; }   } Q[N];   vector<int> V, q[400];   int calc(int l, int r) {     int ret = 0;     for (int i = (l); i < (r + 1); ++i) {       int x = a[i];       ++c[x];       ret += c[x] == V[x];       ret -= c[x] == V[x] + 1;     }     for (int i = (l); i < (r + 1); ++i) c[a[i]] = 0;     return ret;   }   int main() {     scanf( %d%d , &n, &m);     B = sqrt(n);     for (int i = (0); i < (n); ++i) {       scanf( %d , &a[i]);       V.push_back(a[i]);     }     sort(V.begin(), V.end());     V.erase(unique(V.begin(), V.end()), V.end());     for (int i = (0); i < (n); ++i)       a[i] = lower_bound(V.begin(), V.end(), a[i]) - V.begin();     for (int i = (0); i < (m); ++i) {       int l, r;       scanf( %d%d , &l, &r);       Q[i] = Node(l - 1, r - 1, i);     }     sort(Q, Q + m);     for (int i = (0); i < (m); ++i)       if (Q[i].r - Q[i].l + 1 <= B) {         ans[Q[i].id] = calc(Q[i].l, Q[i].r);       } else {         q[Q[i].l / B + (Q[i].l % B > 0)].push_back(i);       }     for (int i = (0); i < (B + 1); ++i) {       int j = 0, k = 0, cnt = 0;       for (j = B * i; j < n && k < ((int)(q[i]).size()); ++j) {         ++c[a[j]];         cnt += c[a[j]] == V[a[j]], cnt -= c[a[j]] == V[a[j]] + 1;         while (k < ((int)(q[i]).size()) && j == Q[q[i][k]].r) {           int tmp = cnt;           for (int r = (Q[q[i][k]].l); r < (B * i); ++r) {             ++c[a[r]];             tmp += c[a[r]] == V[a[r]], tmp -= c[a[r]] == V[a[r]] + 1;           }           for (int r = (Q[q[i][k]].l); r < (B * i); ++r) --c[a[r]];           ans[Q[q[i][k++]].id] = tmp;         }       }       for (int r = (B * i); r < (j); ++r) c[a[r]] = 0;     }     for (int i = (0); i < (m); ++i) printf( %d n , ans[i]);     return 0;   }   