rt。
code:
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n, Q, a[N], ans[N];
namespace Modui {
int kc, L = 1, R, res, id[N];
unordered_map<int, int> mp;
struct Node {
int l, r, id;
Node(int ll = 0, int rr = 0, int iid = 0) {l = ll, r = rr, id = iid;}
} q[N];
inline void init() {
kc = 317;
for(int i = 1 ; i <= n ; ++ i)
id[i] = (i - 1) / kc + 1;
}
// inline bool cmp(Node a, Node b) {
// if(id[a.l] == id[b.l]) return a.r < b.r;
//
// return id[a.l] < id[b.l];
// }
inline bool cmp(Node a, Node b) {
return id[a.l] ^ id[b.l] ? id[a.l] < id[b.l] : id[a.l] & 1 ? a.r < b.r : a.r > b.r;
}
inline void add(int x) {
if(a[x] > n) return;
if(mp[a[x]] == a[x]) -- res;
++ mp[a[x]];
if(mp[a[x]] == a[x]) ++ res;
}
inline void del(int x) {
if(a[x] > n) return;
if(mp[a[x]] == a[x]) -- res;
-- mp[a[x]];
if(mp[a[x]] == a[x]) ++ res;
}
inline void solve() {
sort(q + 1, q + 1 + Q, cmp);
for(int i = 1 ; i <= Q ; ++ i) {
int l = q[i].l, r = q[i].r;
while(L > l) add(-- L);
while(R < r) add(++ R);
while(L < l) del(L ++);
while(R > r) del(R --);
ans[q[i].id] = res;
}
for(int i = 1 ; i <= Q ; ++ i)
cout << ans[i] << '\n';
}
}
using namespace Modui;
signed main() {
ios_base :: sync_with_stdio(NULL);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> Q;
for(int i = 1 ; i <= n ; ++ i)
cin >> a[i];
for(int i = 1 ; i <= Q ; ++ i) {
int l, r;
cin >> l >> r;
q[i] = Node(l, r, i);
}
solve();
return 0;
}