#include <bits/stdc++.h>   using namespace std;   int main(void) {     long n, m, l, r;     vector<long> a(100005);     map<long, vector<long> >::iterator mi;     vector<long>::iterator vi1, vi2;     map<long, vector<long> > hash;     scanf( %ld %ld , &n, &m);     for (long i = 0; i < n; i++) {       scanf( %ld , &a[i]);       if (hash.find(a[i]) != hash.end())         hash[a[i]].push_back(i);       else {         vector<long> v;         v.push_back(i);         hash[a[i]] = v;       }     }     mi = hash.begin();     while (mi != hash.end()) {       if (mi->first > mi->second.size()) {         long temp = mi->first;         mi++;         hash.erase(hash.find(temp));       } else         mi++;     }     long diff = r - l + 1, count = 0;     long first, last;     for (long i = 0; i < m; i++) {       scanf( %ld %ld , &l, &r);       diff = r - l + 1, count = 0;       mi = hash.begin();       while (mi->first <= diff && mi != hash.end()) {         vi1 = upper_bound(mi->second.begin(), mi->second.end(), r - 1);         vi2 = lower_bound(             mi->second.begin(),             mi->second.end() - ((mi->first - 3 > 0) ? (mi->first - 3) : 0),             l - 1);         last = vi1 - mi->second.begin(), first = vi2 - mi->second.begin();         if (last - first == mi->first) count++;         mi++;       }       printf( %ld n , count);     }     return 0;   }   