#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
const ll MAXN=1e5+5;
ll n,q,a[MAXN];
bool vis[MAXN];
vector<ll>pos[MAXN],need;
int main(){
scanf("%lld%lld",&n,&q);
ll ma=0;
for(int i=1;i<=n;++i){
scanf("%lld",&a[i]);
ma=max(ma,a[i]);
pos[a[i]].push_back(i);
if(pos[a[i]].size()==2){
need.push_back(a[i]);
}
}
while(q--){
memset(vis,false,sizeof(vis));
ll l,r;
scanf("%lld%lld",&l,&r);
bool good=true;
for(auto i:need){
ll sz=0;
for(auto j:pos[i]){
if(l<=j&&j<=r){
sz++;
if(sz==2){
good=false;
break;
}
}
}
if(!good){
break;
}
}
if(good){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
将每一个元素在数列里出现了大于 2 的元素保存,同时对于这些元素保存他们所有出现位置。之后直接去判断合法。如果合法就输出 Yes 否则输出 No