#include <stdio.h>
#include <set>
using namespace std;
int bs(int niz[],int a,int krajnji)
{
    int p=0,k=krajnji;
    while((p<k) && (niz[(p+k)/2]!=a))
    {
        if(niz[(p+k)/2]<a)
        {
            p=(p+k)/2+1;            
        }
        else
        {
            k=(p+k)/2-1;            
        }
    }
    return (p+k)/2;    
}
int unutar(int vrednost,int a,int b)
{
    if((vrednost>=a) && (vrednost<=b)) return 1;
    return 0;    
}
int main()
{
    freopen("knjige.in","r",stdin);
    freopen("knjige.out","w",stdout); 
    int n,m;
    scanf("%d%d",&n,&m);
    int niz[100005];
    int dobar=1;
    for(int i=0; i<n; i++)
    {
        scanf("%d",&niz[i]);
        if(niz[i]>65)
        {
            dobar=0;
        }
    }
    
    if(dobar)
    {
         static int pojavljivanja[65][100000];
         static int sledeci[70];
         for(int i=0; i<n; i++)
         {
             pojavljivanja[niz[i]][sledeci[niz[i]]]=i;
             sledeci[niz[i]]++;
         }
         
         for(int i=0; i<m; i++)
         {
             int a,b;
             scanf("%d%d",&a,&b);
             a--;
             b--;
             
             int brojac=0;
             for(int j=1; j<=60; j++)
             {
                 if(sledeci[j]!=0)
                 {
                     int mesto=bs(pojavljivanja[j],a,sledeci[j]-1);
                     if(unutar(pojavljivanja[j][mesto],a,b)) brojac++;
                     else if (((mesto+1)<sledeci[j]) && unutar(pojavljivanja[j][mesto+1],a,b)) brojac++;
                     else if ((mesto>=1) && unutar(pojavljivanja[j][mesto-1],a,b)) brojac++;                                       
                 }
             }
             
             printf("%d\n",brojac);
         }          
    }
    
    else
    {
         for(int i=0; i<m; i++)
         {
             int a,b;
             scanf("%d%d",&a,&b);
             a--;
             b--;  
             
             set <int> noviSet;           
             
             for(int j=a; j<=b; j++)
             {
                 noviSet.insert(niz[j]);
             }
             
             set <int> :: iterator it1=noviSet.begin();
             set <int> :: iterator it2=noviSet.end();
            
             int brojac=0;
             for(; it1!=it2; it1++,brojac++);
             printf("%d\n",brojac);
                            
             
             
         }
    }
       
}
