#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
char buf[1 << 20], *p1, *p2;
inline int _R() {
  int d = 0;
  bool ty = 1;
  char t;
  while (t = (p1 == p2 &&
                      (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
                  ? 0
                  : *p1++),
         (t < '0' || t > '9') && t != '-')
    ;
  t == '-' ? (ty = 0) : (d = t - '0');
  while (t = (p1 == p2 &&
                      (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
                  ? 0
                  : *p1++),
         t >= '0' && t <= '9')
    d = (d << 3) + (d << 1) + t - '0';
  return ty ? d : -d;
}
int n, m, q;
int Tote, Eu[N], Ev[N], Last[N], Next[N], End[N];
bool mark[N];
void ADDE(int id) {
  int x = _R(), y = _R();
  Eu[id] = x, Ev[id] = y;
  End[++Tote] = y, Next[Tote] = Last[x], Last[x] = Tote;
  End[++Tote] = x, Next[Tote] = Last[y], Last[y] = Tote;
}
int vtt, top, scc;
int id[N], s[N], dfn[N], low[N];
bool has[N];
void circle(int x) {
  scc++;
  int u;
  do u = s[top--], id[u] = scc;
  while (u != x);
}
void tarjan(int x, int fa) {
  dfn[x] = low[x] = ++vtt;
  s[++top] = x;
  for (int u, i = Last[x]; i; i = Next[i])
    if (u = End[i], u != fa) {
      if (!dfn[u]) {
        tarjan(u, x);
        low[x] = min(low[x], low[u]);
        if (low[u] > dfn[x]) circle(u);
      } else
        low[x] = min(low[x], dfn[u]);
    }
}
int dep[N], ufa[N], Fa[18][N];
bool Ans[18][N];
vector<int> G[N];
int gf(int x) { return x == ufa[x] ? x : ufa[x] = gf(ufa[x]); }
void LINK(int id) {
  int x = Eu[id], y = Ev[id];
  mark[id] = 1;
  ufa[ufa[x]] = ufa[y];
  G[x].push_back(y);
  G[y].push_back(x);
}
void dfs(int x, int fa) {
  dep[x] = dep[fa] + 1;
  for (auto u : G[x])
    if (u != fa) dfs(u, x);
}
void dfs2(int x, int fa) {
  Fa[0][x] = fa;
  for (int i = 1; i < 18; i++)
    Fa[i][x] = Fa[i - 1][Fa[i - 1][x]],
    Ans[i][x] = Ans[i - 1][x] | Ans[i - 1][Fa[i - 1][x]];
  for (auto u : G[x])
    if (u != fa) dfs2(u, x);
}
bool GA(int x, int y) {
  if (x == y) return 0;
  if (dep[y] > dep[x]) swap(x, y);
  int i, ans = (dep[x] + dep[y]) & 1, t = dep[x] - dep[y];
  for (i = 0; i < 18; i++)
    if (t & (1 << i)) ans |= Ans[i][x], x = Fa[i][x];
  if (x == y) return ans;
  for (i = 17; ~i; i--)
    if (Fa[i][x] != Fa[i][y])
      ans |= Ans[i][x] | Ans[i][y], x = Fa[i][x], y = Fa[i][y];
  return ans | Ans[0][x] | Ans[0][y];
}
int main() {
  int i, x, y;
  n = _R(), m = _R();
  for (i = 1; i <= m; i++) ADDE(i);
  for (i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i, 0), circle(i);
  for (i = 1; i <= n; i++) ufa[i] = i;
  for (i = 1; i <= m; i++)
    if (gf(Eu[i]) != gf(Ev[i])) LINK(i);
  for (i = 1; i <= n; i++)
    if (!dep[i]) dfs(i, 0);
  for (i = 1; i <= m; i++)
    if (!mark[i] && id[Eu[i]] == id[Ev[i]])
      has[id[Eu[i]]] |= ((dep[Eu[i]] ^ dep[Ev[i]]) & 1) ^ 1;
  for (i = 1; i <= m; i++)
    if (mark[i] && id[Eu[i]] == id[Ev[i]])
      x = dep[Eu[i]] > dep[Ev[i]] ? Eu[i] : Ev[i], Ans[0][x] = has[id[x]];
  for (i = 1; i <= n; i++)
    if (!Fa[0][i]) dfs2(i, 0);
  q = _R();
  while (q--) {
    x = _R(), y = _R();
    if (gf(x) != gf(y))
      puts("No");
    else
      puts(GA(x, y) ? "Yes" : "No");
  }
}
