#include <bits/stdc++.h>
using namespace std;
int read() {
  char ch = '!';
  int res = 0, f = 0;
  while (!isdigit(ch)) {
    ch = getchar();
    if (ch == '-') f = 1;
  }
  while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
  return f ? -res : res;
}
const int N = 2e5 + 100;
int n, m, Q, cnt, fa[N], col[N];
int pa[N], dep[N], sum[N], ans[N], dfn[N], low[N], ts, stk[N], top;
vector<int> G[N], nxt[N];
vector<pair<int, int> > q[N];
int getfa(int x) { return x == fa[x] ? x : fa[x] = getfa(fa[x]); }
void dfs(int u, int c) {
  col[u] = c;
  for (auto v : nxt[u])
    if (!col[v]) dfs(v, 3 - c);
}
void dfs3(int u, int lst) {
  pa[u] = lst, dep[u] = dep[lst] + 1;
  for (auto v : G[u])
    if (v != lst) dfs3(v, u);
}
void dfs1(int u, int lst) {
  sum[u] += sum[lst], dfn[u] = ++ts;
  for (auto v : G[u])
    if (v != lst) dfs1(v, u);
}
void dfs2(int u, int lst) {
  fa[u] = u;
  for (auto p : q[u])
    ans[p.second] =
        sum[u] + sum[p.first] - sum[getfa(p.first)] - sum[pa[getfa(p.first)]];
  for (auto v : G[u])
    if (v != lst) dfs2(v, u);
  fa[u] = lst;
}
void tarjan(int u) {
  dfn[u] = low[u] = ++ts, stk[++top] = u;
  for (auto v : nxt[u])
    if (!dfn[v]) {
      tarjan(v), low[u] = min(low[u], low[v]);
      if (low[v] == dfn[u]) {
        ++cnt, G[cnt].push_back(u), G[u].push_back(cnt);
        do G[cnt].push_back(stk[top]), G[stk[top]].push_back(cnt);
        while (stk[top--] != v);
      }
    } else
      low[u] = min(low[u], dfn[v]);
}
int main() {
  n = cnt = read(), m = read();
  for (int i = 1; i <= n; ++i) fa[i] = i;
  for (int i = 1; i <= m; ++i) {
    int a = read(), b = read();
    nxt[a].push_back(b);
    nxt[b].push_back(a);
    fa[getfa(a)] = getfa(b);
  }
  for (int i = 1; i <= n; ++i)
    if (!col[i]) dfs(i, 1);
  for (int i = 1; i <= n; ++i)
    if (!dfn[i]) tarjan(i);
  for (int i = 1; i <= cnt; ++i)
    if (!dep[i]) dfs3(i, 0);
  for (int x = 1; x <= n; ++x)
    for (auto y : nxt[x])
      if (col[x] == col[y])
        dep[pa[x]] > dep[pa[y]] ? sum[pa[x]] = 1 : sum[pa[y]] = 1;
  memset(dfn, 0, sizeof(dfn));
  ts = 0;
  for (int i = 1; i <= cnt; ++i)
    if (dep[i] == 1) dfs1(i, 0);
  Q = read();
  for (int i = 1; i <= Q; ++i) {
    int x = read(), y = read();
    if (getfa(x) != getfa(y)) continue;
    if (col[x] != col[y]) {
      ans[i] = 1;
      continue;
    }
    if (dfn[y] < dfn[x]) swap(x, y);
    q[y].push_back(make_pair(x, i));
  }
  for (int i = 1; i <= cnt; ++i)
    if (dep[i] == 1) dfs2(i, 0);
  for (int i = 1; i <= Q; ++i) puts(ans[i] ? "Yes" : "No");
  return 0;
}
