#include <bits/stdc++.h>
using namespace std;
int bit[100005], n;
void update(int p, int x) {
  for (; p <= n; p += p & (-p)) {
    bit[p] += x;
  }
}
int query(int p) {
  int ret = 0;
  for (; p; p -= p & (-p)) {
    ret += bit[p];
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int m;
  cin >> n >> m;
  vector<int> v(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> v[i];
  }
  int sum = 0;
  vector<pair<int, int>> Q[n + 1];
  for (int i = 1; i <= m; i++) {
    int l, r;
    cin >> l >> r;
    Q[r].push_back({l, i});
  }
  vector<int> last[n + 1];
  vector<int> ans(m + 1);
  for (int i = 1; i <= n; i++) {
    if (v[i] <= n) {
      last[v[i]].emplace_back(i);
      if (last[v[i]].size() >= v[i]) {
        int pos = last[v[i]].size() - v[i];
        update(last[v[i]][pos], 1);
        if (pos != 0) {
          update(last[v[i]][pos - 1], -2);
        }
        if (pos > 1) {
          update(last[v[i]][pos - 2], 1);
        }
      }
    }
    int qr = query(i);
    for (auto &it : Q[i]) {
      ans[it.second] = qr - query(it.first - 1);
    }
  }
  for (int i = 1; i <= m; i++) {
    cout << ans[i] << '\n';
  }
  return 0;
}
