#include <bits/stdc++.h>
using namespace std;
const int MN = 2e5 + 5, LG = 20;
vector<pair<int, int> > Adj[MN];
int mh[MN], Cmp[MN], h[MN], es[MN], ee[MN], cmp, n, m;
vector<int> st, C[MN], g[MN], adj[MN];
bool mk[MN], col[MN], is[MN], D[LG][MN];
int par[LG][MN];
int H[MN], V[MN], sz_v;
void DFS(int s, int pr, int Comp) {
  Cmp[s] = Comp;
  mk[s] = true;
  mh[s] = h[s];
  for (auto x : Adj[s]) {
    int v = x.first, e = x.second;
    if (mk[v]) continue;
    int lst = -1;
    if (!st.empty()) lst = st.back();
    h[v] = h[s] + 1;
    DFS(v, e, Comp);
    if (mh[v] >= h[s]) {
      while (!st.empty() && st.back() != lst) {
        C[cmp].push_back(st.back());
        st.pop_back();
      }
      ++cmp;
    }
    mh[s] = min(mh[s], mh[v]);
  }
  for (auto x : Adj[s]) {
    int v = x.first, e = x.second;
    if (h[v] < h[s]) {
      if (e ^ pr) mh[s] = min(mh[s], h[v]);
      st.push_back(e);
    }
  }
}
bool bipartite(int s) {
  mk[s] = true;
  for (auto v : g[s])
    if (!mk[v]) {
      col[v] = !col[s];
      if (!bipartite(v)) return false;
    } else if (col[v] == col[s])
      return false;
  return true;
}
void init() {
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    cin >> es[i] >> ee[i];
    --es[i], --ee[i];
    Adj[es[i]].push_back({ee[i], i});
    Adj[ee[i]].push_back({es[i], i});
  }
  int counter = 0;
  for (int i = 0; i < n; ++i)
    if (!mk[i]) DFS(i, -1, counter++);
  for (int i = 0; i < n; ++i) Adj[i].clear();
  memset(mk, 0, sizeof mk);
  for (int i = 0; i < cmp; ++i) {
    sz_v = 0;
    for (auto x : C[i])
      g[es[x]].push_back(ee[x]), g[ee[x]].push_back(es[x]), V[sz_v++] = es[x],
                                                            V[sz_v++] = ee[x];
    sort(V, V + sz_v);
    sz_v = unique(V, V + sz_v) - V;
    is[i + n] = !bipartite(es[C[i].back()]);
    for (int j = 0; j < sz_v; ++j) {
      int v = V[j];
      adj[v].push_back(i + n), adj[i + n].push_back(v);
      mk[v] = false, col[v] = false;
      g[v].clear();
    }
  }
  n += cmp;
}
void dfs(int s, int pr) {
  mk[s] = true;
  if (pr == -1)
    H[s] = 0;
  else {
    H[s] = H[pr] + 1;
    if (pr >= n - cmp && is[pr]) D[0][s] = true;
  }
  par[0][s] = pr;
  for (int i = 1; i < LG; ++i) {
    if (~par[i - 1][s]) {
      par[i][s] = par[i - 1][par[i - 1][s]];
      D[i][s] = D[i - 1][s] || D[i - 1][par[i - 1][s]];
    } else
      par[i][s] = -1;
  }
  for (auto v : adj[s])
    if (v ^ pr) dfs(v, s);
}
bool lca(int u, int v) {
  bool ret = false;
  if (H[u] < H[v]) swap(u, v);
  int t = H[u] - H[v];
  for (int i = 0; i < LG; ++i)
    if (t & (1 << i)) ret = ret || D[i][u], u = par[i][u];
  if (u == v) return ret;
  for (int i = LG - 1; ~i; --i)
    if (par[i][u] ^ par[i][v]) {
      ret = ret || D[i][v] || D[i][u];
      u = par[i][u], v = par[i][v];
    }
  return ret || D[0][u] || D[0][v];
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  init();
  memset(mk, 0, sizeof mk);
  for (int i = 0; i < n; ++i)
    if (!mk[i]) dfs(i, -1);
  int q;
  cin >> q;
  while (q--) {
    int u, v;
    cin >> u >> v;
    --u, --v;
    if (Cmp[u] ^ Cmp[v])
      cout << "No\n";
    else if ((h[u] - h[v]) % 2)
      cout << "Yes\n";
    else
      cout << (lca(u, v) ? "Yes\n" : "No\n");
  }
  return 0;
}
