#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int x = 0, f = 1;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = 0;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + (ch ^ '0');
    ch = getchar();
  }
  return f ? x : -x;
}
const int N = 1e5 + 5;
int n, m, head[N], num, vis[N], col[N], id;
vector<int> E[N];
int dep[N], fa[N], top[N], son[N], siz[N];
inline void dfs1(int u, int pa) {
  vis[u] = 1;
  col[u] = id;
  dep[u] = dep[fa[u] = pa] + 1;
  siz[u] = 1;
  for (int v : E[u]) {
    if (vis[v]) continue;
    dfs1(v, u);
    siz[u] += siz[v];
    if (siz[son[u]] < siz[v]) son[u] = v;
  }
}
inline void dfs2(int u) {
  vis[u] = 1;
  if (!top[u]) top[u] = u;
  if (son[u]) {
    top[son[u]] = top[u];
    dfs2(son[u]);
  }
  for (int v : E[u]) {
    if (vis[v] || v == son[u]) continue;
    dfs2(v);
  }
}
inline int lca(int x, int y) {
  while (top[x] ^ top[y])
    if (dep[top[x]] < dep[top[y]])
      y = fa[top[y]];
    else
      x = fa[top[x]];
  return dep[x] < dep[y] ? x : y;
}
int dfn[N], low[N], dfc, stk[N], tp, cnt[N], tot, c[N], flg;
vector<int> V[N];
inline void Tarjan(int u, int pa) {
  dfn[u] = low[u] = ++dfc;
  stk[++tp] = u;
  for (int v : E[u]) {
    if (v == pa) continue;
    if (!dfn[v]) {
      Tarjan(v, u);
      low[u] = min(low[u], low[v]);
      if (dfn[u] <= low[v]) {
        V[++tot].push_back((u));
        for (int x = 0; x ^ v; --tp) x = stk[tp], V[tot].push_back((x));
      }
    } else
      low[u] = min(low[u], dfn[v]);
  }
}
inline void Dfs(int u, int ccc) {
  if (flg) return;
  c[u] = ccc;
  for (int v : E[u]) {
    if (vis[v] ^ vis[u]) continue;
    if (!c[v])
      Dfs(v, 3 - ccc);
    else if (c[u] == c[v]) {
      flg = 1;
      return;
    }
  }
}
inline void Cal(int u, int pa) {
  vis[u] = 1;
  cnt[u] += cnt[pa];
  for (int v : E[u]) {
    if (vis[v]) continue;
    Cal(v, u);
  }
}
inline bool check(int x, int y) {
  if (col[x] != col[y]) return 0;
  if ((dep[x] & 1) ^ (dep[y] & 1)) return 1;
  return cnt[x] + cnt[y] - 2 * cnt[lca(x, y)] > 0;
}
int main() {
  n = read(), m = read();
  for (int i = (1), _ed = (m); i <= _ed; ++i) {
    int u = read(), v = read();
    E[u].push_back(v), E[v].push_back(u);
  }
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    if (!vis[i]) ++id, dfs1(i, 0);
  memset(vis, 0, sizeof vis);
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    if (!vis[i]) dfs2(i);
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    if (!dfn[i]) tp = 0, Tarjan(i, 0);
  memset(vis, 0, sizeof vis);
  for (int i = (1), _ed = (tot); i <= _ed; ++i) {
    for (int j = (0), _ed = (V[i].size() - 1); j <= _ed; ++j)
      vis[V[i][j]] = i, c[V[i][j]] = 0;
    flg = 0;
    Dfs(V[i][0], 1);
    if (flg)
      for (int j = (1), _ed = (V[i].size() - 1); j <= _ed; ++j)
        cnt[V[i][j]] = 1;
  }
  memset(vis, 0, sizeof vis);
  for (int i = (1), _ed = (n); i <= _ed; ++i)
    if (!vis[i]) Cal(i, 0);
  for (int q = (1), _ed = (read()); q <= _ed; ++q) {
    int x = read(), y = read();
    puts(check(x, y) ? "Yes" : "No");
  }
  return 0;
}
