/*
  Ovo je zvanicno resenje. Resenje je off-line.
  Slozenost resenja po upitu je O(log broj_autora).
  Nakon ucitavanja intervala, sortiramo sve intervale.
  Shodno tome, slozenost celog programa (gde je I 
  broj intervala, A broj autora, a N broj knjiga) je
  O(I * log A + I * log I + N)
*/
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#define ffor(_a,_f,_t) for(int _a=(_f),__t=(_t);_a<__t;_a++)
#define all(_v) (_v).begin() , (_v).end()
#define sz size()
#define pb push_back
#define SET(__set, val) memset(__set, val, sizeof(__set))
#define FOR(__i, __n) ffor (__i, 0, __n)
#define syso system("pause")
#define mp make_pair

using namespace std;

const int MAXN = 100000;
const int MAXK = 100000;
const int TYPE_BOOK = 0;
const int TYPE_INTERVAL = 1;

struct myt{
  int s, e, val, type, idx;
  myt(){
    
  }
  
  myt(int _s, int _e, int _val, int _type, int _idx){
    s = _s;
    e = _e;
    val = _val;
    type = _type;
    idx = _idx;
  }
  
  friend bool operator <(const myt &a, const myt &b){
    if (a.e < b.e)
      return true;
    if (a.e > b.e)
      return false;
    if (a.type == TYPE_BOOK && b.type == TYPE_INTERVAL)
      return true;
    return false;
  }
  
};

int a[MAXN];

int bit[MAXN + 1];

void update(int idx, int val){
  while (idx <= MAXN){
    bit[idx] += val;
    idx += (idx & -idx);
  }
}

int read(int idx){
  int ret = 0;
  while (idx){
    ret += bit[idx];
    idx -= (idx & -idx);
  }
  
  return ret;
}

int lastIdx[MAXN];

myt vals[MAXN + MAXK];
int ret[MAXK];

int main(){
//  clock_t begin, end;
//  begin = clock() * CLK_TCK;

  freopen("knjige.out", "wt", stdout);
  freopen("knjige.in", "r", stdin);
  int n, k, v, cnt = 0;
  scanf("%d %d", &n, &k);
  FOR (i, n){
    scanf("%d", &v);
    v--;
    vals[cnt++] = myt(i + 1, i + 1, v, TYPE_BOOK, i);
  }
    
  // kroz sve upite
  int idxs, idxe;
  FOR (i, k){
    scanf("%d %d", &idxs, &idxe);
    vals[cnt++] = myt(idxs, idxe, -1, TYPE_INTERVAL, i);
  }
  
  sort(vals, vals + n + k);
  SET(lastIdx, 255);
  FOR (i, cnt)
    if (vals[i].type == TYPE_BOOK){
      v = vals[i].val;
      if (lastIdx[v] != -1)
        update(lastIdx[v], -1);
      lastIdx[v] = vals[i].s;
      update(lastIdx[v], 1);
    }
    else
      ret[vals[i].idx] = read(vals[i].e) - read(vals[i].s - 1);
      
  FOR (i, k)
    printf("%d\n", ret[i]);
    
//  end = clock() * CLK_TCK;
//  cout << (end - begin) / 1000.0 << endl;

  return 0;
}
