#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const int maxn = 1008611;
int a[maxn],num[maxn];
bool ans[maxn];
struct node
{
int l,r,pos;
}c;
vector <node> v[maxn];
bool cmp(node x,node y)
{
if(x.r == y.r) return x.l < y.l;
return x.r < y.r;
}
int Push(int x)
{
num[a[x]]++;
//cout<<'*'<<x<<' '<<num[a[x]]<<endl;
if(num[a[x]] <= 1) return 1;
return 0;
}
int Del(int x)
{
num[a[x]]--;
//cout<<'#'<<x<<' '<<num[a[x]]<<endl;
if(num[a[x]] <= 1) return -1;
return 0;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int key = sqrt(n) + 1;
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
for(int i = 1; i <= m; i++)
{
scanf("%d%d",&c.l,&c.r);
c.pos = i;
for(int j = 1; j <= key; j++)
{
if(c.l >= (j - 1) * key + 1 && c.l <= j * key) v[j].push_back(c);
}
}
for(int i = 1; i <= 320; i++)
{
if(v[i].size() == 0) continue;
sort(v[i].begin(),v[i].end(),cmp);
int l = v[i][0].l;
int r = v[i][0].r;
int sum = 0;
memset(num,0,sizeof(num));
for(int j = v[i][0].l; j <= v[i][0].r; j++)
{
int y = Push(j);
sum += y;
}
if(sum == r - l + 1) ans[v[i][0].pos] = 1;
for(int j = 1; j < v[i].size(); j++)
{
while(r < v[i][j].r)
{
r++;
//cout<<v[i][j].r<<endl;
sum += Push(r);
}
while(l < v[i][j].l)
{
//cout<<v[i][j].l<<endl;
sum += Del(l);
l++;
}
while(l > v[i][j].l)
{
l--;
//cout<<v[i][j].l<<endl;
sum += Push(l);
}
//cout<<v[i][j].r<<endl;
if(sum == r - l + 1) ans[v[i][j].pos] = 1;
}
}
for(int i = 1; i <= m; i++)
{
if(ans[i]) printf("Yes\n");
else printf("No\n");
}
return 0;
}