#include <bits/stdc++.h>
using namespace std;
struct st {
  int L, R, id;
} query[100005];
int ar[100005], N, block, ans[100005];
int freq[100005];
bool cmp(st q1, st q2) {
  if (q1.L / block == q2.L / block)
    return q1.R < q2.R;
  else
    return q1.L / block < q2.L / block;
}
int main() {
  int i, j, m, currL, currR, cnt, L, R;
  cin >> N >> m;
  for (i = 0; i < N; i++) scanf("%d,", &ar[i]);
  for (i = 0; i < m; i++) {
    scanf("%d,", &query[i].L);
    scanf("%d,", &query[i].R);
    query[i].L--;
    query[i].R--;
    query[i].id = i;
  }
  block = sqrt(N);
  sort(query, query + m, cmp);
  currL = currR = cnt = 0;
  if (ar[currL] <= N) {
    freq[ar[currL]]++;
    if (freq[ar[currL]] == ar[currL]) cnt++;
  }
  for (i = 0; i < m; i++) {
    L = query[i].L;
    R = query[i].R;
    while (currL < L) {
      if (ar[currL] <= N) {
        if (freq[ar[currL]] == ar[currL]) cnt--;
        freq[ar[currL]]--;
        if (freq[ar[currL]] == ar[currL]) cnt++;
      }
      currL++;
    }
    while (currL > L) {
      currL--;
      if (ar[currL] <= N) {
        if (freq[ar[currL]] == ar[currL]) cnt--;
        freq[ar[currL]]++;
        if (freq[ar[currL]] == ar[currL]) cnt++;
      }
    }
    while (currR < R) {
      currR++;
      if (ar[currR] <= N) {
        if (freq[ar[currR]] == ar[currR]) cnt--;
        freq[ar[currR]]++;
        if (freq[ar[currR]] == ar[currR]) cnt++;
      }
    }
    while (currR > R) {
      if (ar[currR] <= N) {
        if (freq[ar[currR]] == ar[currR]) cnt--;
        freq[ar[currR]]--;
        if (freq[ar[currR]] == ar[currR]) cnt++;
      }
      currR--;
    }
    ans[query[i].id] = cnt;
  }
  for (i = 0; i < m; i++) cout << ans[i] << "\n";
  return 0;
}
