#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int INF = 0x3f3f3f3f;
int n, low[200000 + 1], m, fa[200000 + 1][19], cnt, root[200000 + 1], R,
    depth[200000 + 1];
vector<int> g[200000 + 1], g2[200000 + 1];
vector<int> roots;
bool vis[200000 + 10], can[200000 + 20];
bool odd[200000 + 10];
int sum[200000 + 10];
stack<int> st;
void dfs(int now, int pre = 0, int deep = 1) {
  low[now] = depth[now] = deep;
  vis[now] = 1;
  root[now] = R;
  st.push(now);
  for (auto it : g[now]) {
    if (it == pre) continue;
    if (vis[it]) {
      low[now] = min(low[now], depth[it]);
    } else {
      dfs(it, now, deep + 1);
      low[now] = min(low[now], low[it]);
      if (low[it] >= depth[now]) {
        int is;
        ++cnt;
        do {
          is = st.top();
          st.pop();
          g2[cnt].push_back(is);
          g2[is].push_back(cnt);
        } while (is != it);
        g2[now].push_back(cnt);
        g2[cnt].push_back(now);
      }
    }
  }
}
int colo[200000 + 10];
bool try_paint(int now, int col = 1) {
  vis[now] = 1;
  colo[now] = col;
  for (auto it : g[now]) {
    if (!can[it]) continue;
    if (vis[it]) {
      if (col == colo[it]) {
        return 0;
      }
    } else {
      if (!try_paint(it, col ^ 1)) return 0;
    }
  }
  return 1;
}
void dfs2(int now, int deep = 1) {
  vis[now] = 1;
  depth[now] = deep;
  for (auto it : g[now]) {
    if (!vis[it]) {
      dfs2(it, deep + 1);
    }
  }
}
void dfs3(int now, int pre = 0, int deep = 1) {
  depth[now] = deep + 1;
  fa[now][0] = pre;
  for (int i = 1; i <= 18; ++i) fa[now][i] = fa[fa[now][i - 1]][i - 1];
  sum[now] += odd[now];
  for (auto it : g2[now]) {
    if (it != pre) {
      sum[it] += sum[now];
      dfs3(it, now, deep + 1);
    }
  }
}
int lca(int u, int v) {
  if (depth[u] > depth[v]) swap(u, v);
  int jump = depth[v] - depth[u];
  for (int i = 0; i < 19; ++i) {
    if ((jump >> i) & 1) {
      v = fa[v][i];
    }
  }
  if (u == v) return v;
  for (int i = 18; i >= 0; --i) {
    if (fa[u][i] != fa[v][i]) {
      u = fa[u][i];
      v = fa[v][i];
    }
  }
  return fa[u][0];
}
pair<int, int> query[200000 + 2];
bool rest[200000 + 2];
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  cnt = n;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; ++i) {
    if (!vis[i]) {
      R = i;
      roots.push_back(i);
      while (!st.empty()) st.pop();
      dfs(i);
    }
  }
  memset(vis, 0, sizeof(vis));
  for (int i = n + 1; i <= cnt; ++i) {
    for (auto it : g2[i]) {
      can[it] = 1;
    }
    odd[i] = !try_paint(g2[i][0]);
    for (auto it : g2[i]) {
      can[it] = 0;
      vis[it] = 0;
    }
  }
  for (auto it : roots) {
    dfs2(it);
  }
  int qqq;
  cin >> qqq;
  for (int i = 1; i <= qqq; ++i) {
    cin >> query[i].first >> query[i].second;
    if (root[query[i].first] == root[query[i].second])
      if ((depth[query[i].first] + depth[query[i].second]) & 1) {
        rest[i] = 1;
      }
  }
  for (auto it : roots) {
    dfs3(it);
  }
  for (int i = 1; i <= qqq; ++i) {
    int a, b;
    a = query[i].first;
    b = query[i].second;
    if (root[a] != root[b]) continue;
    int lcc = lca(a, b);
    lcc = fa[lcc][0];
    if (sum[a] + sum[b] - 2 * sum[lcc]) {
      rest[i] = 1;
    }
  }
  for (int i = 1; i <= qqq; ++i) {
    if (query[i].first == query[i].second) rest[i] = 0;
    cout << (rest[i] ? "Yes\n" : "No\n");
  }
  return 0;
}
