#include<bits/stdc++.h>
#define ls(p) p<<1
#define rs(p) p<<1|1
using namespace std;
const int maxn=3e5+5;
int f[maxn],ans,l[maxn],r[maxn],n,m,tot,k,pri[maxn*4],siz[maxn],top,tag[maxn*4];
map<pair<int,int>,int>mp;
struct edge{
int x,y;
}a[maxn],stk[maxn];
vector<int>tree[maxn*5];
void updata(int p,int pl,int pr,int l,int r,int x)
{
if(l<=pl&&r>=pr)
{
tree[p].push_back(x);
return;
}
int mid=(pl+pr)>>1;
if(l<=mid)
updata(ls(p),pl,mid,l,r,x);
if(r>mid)
updata(rs(p),mid+1,pr,l,r,x);
}
int find(int x)
{
if(x!=f[x])
return find(f[x]);
return x;
}
void dfs(int p,int l,int r)
{
int t=top;
for(int v:tree[p])
{
int x=a[v].x,y=a[v].y;
x=find(x),y=find(y);
if(x==y)
{
tag[++top]=1;
ans++;
}else
{
if(siz[x]<siz[y])
swap(x,y);
f[y]=x;
siz[x]+=siz[y];
stk[++top]={x,y};
tag[top]=0;
}
}
if(l==r)
{
pri[l]=ans;
while(top!=t)
{
if(tag[top]==1)
{
tag[top]=0;
ans--;
}else
{
f[stk[top].y]=stk[top].y;
siz[stk[top].x]-=siz[stk[top].y];
}
top--;
}
return;
}
int mid=(l+r)>>1;
dfs(ls(p),l,mid);
dfs(rs(p),mid+1,r);
while(top!=t)
{
if(tag[top]==1)
{
tag[top]=0;
ans--;
}else
{
f[stk[top].y]=stk[top].y;
siz[stk[top].x]-=siz[stk[top].y];
}
top--;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
top=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
if(!mp[{x,y}])
{
a[++tot]={x,y+n};
mp[{x,y}]=tot;
l[tot]=0;
}
}
cin>>k;
for(int i=1;i<=k;i++)
{
int x,y;
cin>>x>>y;
if(mp[{x,y}])
{
r[mp[{x,y}]]=i-1;
mp[{x,y}]=0;
}else
{
mp[{x,y}]=++tot;
l[tot]=i;
a[tot]={x,y+n};
}
}
for(int i=1;i<=tot;i++)
{
if(r[i]==0)
r[i]=k;
updata(1,0,k,l[i],r[i],i);
}
for(int i=1;i<=2*n;i++)
f[i]=i;
dfs(1,0,k);
for(int i=1;i<=k;i++)
{
if(pri[i])
cout<<"Yes\n";
else
cout<<"No\n";
}
}