func_code_string: #include <bits/stdc++.h>   using namespace std;   queue<int> fila[100000 + 10];   int bit[100000 + 10];   int rsp[100000 + 10];   pair<pair<int, int>, int> q[100000 + 10];   int v[100000 + 10];   int ls[100000 + 10];   void add(int p, int v) {     if (p == 0) return;     for (; p <= 100000; p += (p & (-p))) bit[p] += v;   }   int get(int p) {     int ret = 0;     for (; p > 0; p -= (p & (-p))) ret += bit[p];     return ret;   }   int main() {     int n, m;     scanf( %d %d , &n, &m);     memset(bit, 0, sizeof(bit));     for (int i = 1; i <= n; i++) scanf( %d , &v[i]), ls[i] = -1, fila[i].push(0);     for (int i = 1; i <= m; i++) {       scanf( %d %d , &q[i - 1].first.second, &q[i - 1].first.first);       q[i - 1].second = i - 1;     }     sort(q, q + m);     int ind = 0;     for (int i = 1; i <= n; i++) {       if (v[i] <= n) {         if (ls[v[i]] != -1) {           add(ls[v[i]] + 1, -1);           add(fila[v[i]].front() + 1, +1);         }         if (fila[v[i]].size() == v[i]) {           add(fila[v[i]].front() + 1, +1);           ls[v[i]] = fila[v[i]].front();           fila[v[i]].pop();           fila[v[i]].push(i);           add(fila[v[i]].front() + 1, -1);         } else           fila[v[i]].push(i);       }       while (ind < m && q[ind].first.first == i) {         rsp[q[ind].second] = get(q[ind].first.second);         ind++;       }     }     for (int i = 0; i < m; i++) {       printf( %d n , rsp[i]);     }     return 0;   }   