func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     int L, R, i;   } q[100001];   bool cmp(node x, node y) {     if (x.L / 555 != y.L / 555) {       return x.L / 555 < y.L / 555;     }     return x.R < y.R;   }   map<int, int> mpp;   int ans = 0, I;   int arr[100000 + 1], ct[100001], arr2[100001];   void add(int p) {     ct[arr2[p]]++;     if (ct[arr2[p]] == arr[p]) {       ans++;     }     if (ct[arr2[p]] == arr[p] + 1) ans--;   }   void rem(int p) {     if (ct[arr2[p]] == arr[p]) ans--;     if (ct[arr2[p]] == arr[p] + 1) ans++;     ct[arr2[p]]--;   }   int main() {     int n, m;     cin >> n >> m;     vector<pair<int, int> > V;     for (int i = 1; i <= n; i++) {       cin >> arr[i];       V.push_back(make_pair(arr[i], i));     }     sort(V.begin(), V.end());     int r = 0;     for (int i = 0; i < V.size(); i++) {       if (i && V[i].first != V[i - 1].first) r++;       arr2[V[i].second] = r;     }     int x, y;     for (int i = 0; i < m; i++) {       cin >> q[i].L >> q[i].R;       q[i].i = i;     }     sort(q, q + m, cmp);     x = q[0].L, y = q[0].R;     for (int i = x; i <= y; i++) {       ct[arr2[i]]++;       if (ct[arr2[i]] == arr[i]) ans++;       if (ct[arr2[i]] == arr[i] + 1) ans--;     }     int out[m];     out[q[0].i] = ans;     for (I = 1; I < m; I++) {       int l = q[I].L, r = q[I].R;       while (x < l) {         rem(x);         x++;       }       while (x > l) {         x--;         add(x);       }       while (y < r) {         y++;         add(y);       }       while (y > r) {         rem(y);         y--;       }       out[q[I].i] = ans;     }     for (int i = 0; i < m; i++) {       cout << out[i] <<   n ;     }     return 0;   }   