#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100 * 1000 + 10, SQ = 444;
int n, m, a[MAX_N], l[MAX_N], r[MAX_N], id[MAX_N], cnt[MAX_N];
int ans[MAX_N], now_ans;
void read_input() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &l[i], &r[i]);
    l[i]--;
  }
}
bool cmp(int &i, int &j) {
  pair<int, int> x(l[i] / SQ, l[i] / SQ & 1 ? -r[i] : r[i]);
  pair<int, int> y(l[j] / SQ, l[j] / SQ & 1 ? -r[j] : r[j]);
  return x < y;
}
void pre() {
  iota(id, id + m, 0);
  sort(id, id + m, cmp);
}
inline void add(int v, int x) {
  if (v > n) return;
  now_ans -= cnt[v] == v;
  cnt[v] += x;
  now_ans += cnt[v] == v;
}
void mo() {
  int L = 0, R = 0;
  for (int tmp = 0; tmp < m; tmp++) {
    int i = id[tmp];
    while (R < r[i]) add(a[R++], +1);
    while (R > r[i]) add(a[--R], -1);
    while (L < l[i]) add(a[L++], -1);
    while (L > l[i]) add(a[--L], +1);
    ans[i] = now_ans;
  }
}
void solve() {
  pre();
  mo();
}
void print_output() {
  for (int i = 0; i < m; i++) printf("%d\n", ans[i]);
}
int main() {
  read_input();
  solve();
  print_output();
}
