func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Q {     int l;     int r;     int num;     Q(int _l, int _r, int _num) : l(_l), r(_r), num(_num) {}   };   int cnt[100100];   int res[100100];   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int n, m;     cin >> n >> m;     vector<int> a(n);     for (int i = 0; i < n; i++) {       cin >> a[i];     }     vector<int> comp = a;     sort(comp.begin(), comp.end());     comp.resize(unique(comp.begin(), comp.end()) - comp.begin());     for (int i = 0; i < n; i++) {       a[i] = lower_bound(comp.begin(), comp.end(), a[i]) - comp.begin();     }     int K = sqrt(n);     int B = n / K + 1;     vector<vector<Q>> blocks(B);     for (int i = 0; i < m; i++) {       int l, r;       cin >> l >> r;       l--;       r--;       blocks[l / K].emplace_back(l, r, i);     }     for (int b = 0; b < B; b++) {       sort(blocks[b].begin(), blocks[b].end(),            [&](Q x, Q y) { return x.r < y.r; });     }     for (int b = 0; b < B; b++) {       if (blocks[b].empty()) continue;       memset(cnt, 0, sizeof(cnt));       int ans = 0;       for (int i = blocks[b][0].l; i <= blocks[b][0].r; i++) {         if (cnt[a[i]] == comp[a[i]]) {           ans--;         }         cnt[a[i]]++;         if (cnt[a[i]] == comp[a[i]]) {           ans++;         }       }       int pl = blocks[b][0].l;       int pr = blocks[b][0].r;       res[blocks[b][0].num] = ans;       for (int q = 1; q < (int)blocks[b].size(); q++) {         for (int i = pr + 1; i <= blocks[b][q].r; i++) {           if (cnt[a[i]] == comp[a[i]]) {             ans--;           }           cnt[a[i]]++;           if (cnt[a[i]] == comp[a[i]]) {             ans++;           }         }         pr = blocks[b][q].r;         for (int i = blocks[b][q].l; i < pl; i++) {           if (cnt[a[i]] == comp[a[i]]) {             ans--;           }           cnt[a[i]]++;           if (cnt[a[i]] == comp[a[i]]) {             ans++;           }         }         for (int i = pl; i < blocks[b][q].l; i++) {           if (cnt[a[i]] == comp[a[i]]) {             ans--;           }           cnt[a[i]]--;           if (cnt[a[i]] == comp[a[i]]) {             ans++;           }         }         pl = blocks[b][q].l;         res[blocks[b][q].num] = ans;       }     }     for (int i = 0; i < m; i++) {       cout << res[i] <<   n ;     }     return 0;   }   