#include <bits/stdc++.h>
using namespace std;
#define r(i,a,n) for(int (i)=a;i<n;i++)
#define vii vector<int,int>
#define ll long long int
#define it iterator
#define lr(i,a,n) for(long long int (i)=a;i<n;i++)
int arr[100010];
vector< pair<int,int> > stree[500010];
map<int,int> que;
int ma=0;
void merge(int parent,int c1,int c2){
    int s1=stree[c1].size();
    int s2=stree[c2].size();
    int p1=0;
    int p2=0;
    while(p1<s1&&p2<s2){
        if(stree[c1][p1].first==stree[c2][p2].first){
            stree[parent].push_back(make_pair(stree[c1][p1].first,stree[c1][p1].second+stree[c2][p2].second));
            p1++;
            p2++;
        }
        else if(stree[c1][p1].first<stree[c2][p2].first){
            stree[parent].push_back(make_pair(stree[c1][p1].first,stree[c1][p1].second));
            p1++;
        }
        else{
            stree[parent].push_back(make_pair(stree[c2][p2].first,stree[c2][p2].second));
            p2++;
        }
    }
    while(p1<s1){
        stree[parent].push_back(make_pair(stree[c1][p1].first,stree[c1][p1].second));
        p1++;
    }
    while(p2<s2){
        stree[parent].push_back(make_pair(stree[c2][p2].first,stree[c2][p2].second));
        p2++;
    }
    return;
}
void buildsegmenttree(int s,int e,int si){
    if(s==e){
        stree[si].push_back(make_pair(arr[s],1));
        return;
    }
    else{
        int mid=(s+e)/2;
        buildsegmenttree(s,mid,si*2 + 1);
        buildsegmenttree(mid+1,e,si*2 +2);
        merge(si,si*2 + 1,si*2 + 2);
        return;
    }
}
void query(int s,int e,int qs,int qe,int si){
   //cout<<s<<e<<endl;
    if(s>qe || e<qs){
        return;
    }
    if(s>=qs && e<=qe){
      for(int i=0;i<stree[si].size();i++){
          map<int,int>::iterator it=que.find(stree[si][i].first);
          if(it==que.end()){
              que.insert(make_pair(stree[si][i].first,stree[si][i].second));
              ma=max(ma,stree[si][i].second);
          }
          else{
              it->second+=(stree[si][i].second);
              ma=max(ma,it->second);
          }
       }
        return;
    }
    int mid;
    mid=(s+e)/2;
    query(s,mid,qs,qe,si*2 +1);
    query(mid+1,e,qs,qe,si*2 +2);
    return;
}
int main()
{
    int n,q;
    cin>>n>>q;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    buildsegmenttree(0,n-1,0);
    for(int i=0;i<q;i++){
        int a,b;
        cin>>a>>b;
        a--;
        b--;
        ma=0;
       que.clear();
       query(0,n-1,a,b,0);
       cout<<ma<<endl;
    }
    return 0;
}
