#include <bits/stdc++.h>
using namespace std;
const int MXN = 100005;
const int LOG = 17;
struct DisjointSet {
  int fa[MXN];
  void init(int n) {
    for (int i = (0); i <= (n); i++) fa[i] = i;
  }
  int f(int x) { return x == fa[x] ? x : fa[x] = f(fa[x]); }
  void uni(int x, int y) { fa[f(y)] = f(x); }
} djs, con;
int N, M;
int fa[MXN], dep[MXN], inc[MXN], cnt[MXN], vst[MXN];
vector<int> E[MXN], child[MXN];
vector<pair<int, int> > backedge;
int up[LOG][MXN];
void DFS(int u, int f, int d) {
  vst[u] = 1;
  fa[u] = f;
  up[0][u] = f;
  dep[u] = d;
  for (auto v : E[u]) {
    if (vst[v]) {
      if (f != v) backedge.push_back({u, v});
      continue;
    }
    DFS(v, u, d + 1);
    child[u].push_back(v);
  }
}
void DFS2(int u) {
  vst[u] = 1;
  if (inc[djs.f(u)] and djs.f(u) != u) cnt[u]++;
  for (auto v : child[u]) {
    assert(!vst[v]);
    cnt[v] = cnt[u];
    DFS2(v);
  }
}
int lca(int u, int v) {
  if (dep[u] > dep[v]) swap(u, v);
  int k = dep[v] - dep[u];
  for (int i = 0; i < (LOG); i++)
    if (k & (1 << i)) {
      v = up[i][v];
    }
  if (u == v) return u;
  assert(dep[u] == dep[v]);
  for (int i = LOG - 1; i >= 0; i--) {
    if (up[i][u] != up[i][v]) {
      u = up[i][u];
      v = up[i][v];
    }
  }
  return fa[u];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  cin >> N >> M;
  con.init(N);
  for (int i = 0; i < (M); i++) {
    int u, v;
    cin >> u >> v;
    E[u].push_back(v);
    E[v].push_back(u);
    con.uni(u, v);
  }
  for (int i = (1); i <= (N); i++)
    if (!vst[i]) {
      DFS(i, i, 0);
    }
  for (int i = (1); i <= (LOG - 1); i++)
    for (int j = (1); j <= (N); j++) {
      up[i][j] = up[i - 1][up[i - 1][j]];
    }
  djs.init(N);
  for (auto it : backedge) {
    int u = it.first, v = it.second;
    int l = lca(u, v);
    if ((dep[u] + dep[v]) % 2 == 0) inc[l] = 1;
    u = djs.f(u);
    v = djs.f(v);
    while (u != v) {
      if (dep[u] > dep[v]) swap(u, v);
      djs.uni(fa[v], v);
      v = djs.f(v);
    }
    assert(dep[djs.f(u)] <= dep[djs.f(l)]);
    assert(dep[djs.f(v)] <= dep[djs.f(l)]);
  }
  for (int i = (1); i <= (N); i++)
    if (inc[i] and djs.f(i) != i) {
      inc[djs.f(i)] = 1;
      inc[i] = 0;
    }
  for (int i = (1); i <= (N); i++) vst[i] = 0;
  for (int i = (1); i <= (N); i++)
    if (!vst[i]) {
      DFS2(i);
    }
  int Q;
  cin >> Q;
  for (int _ = 0; _ < (Q); _++) {
    int u, v;
    cin >> u >> v;
    int ans = 0;
    int f = lca(u, v);
    if (cnt[u] - cnt[f] or cnt[v] - cnt[f]) ans = 1;
    if ((dep[u] + dep[v]) % 2 == 1) ans = 1;
    if (con.f(u) != con.f(v)) ans = 0;
    if (u == v) ans = 0;
    if (ans)
      cout << "Yes\n";
    else
      cout << "No\n";
  }
  return 0;
}
