#include <bits/stdc++.h>
using namespace std;
int N, M, Q, CN;
int a, b;
int uf[100005];
int find(int x) { return x == uf[x] ? x : uf[x] = find(uf[x]); }
int dep[100005];
int dad[100005];
int dis[100005];
int low[100005];
int cut[100005];
int com[100005];
int now;
int A[100005];
int B[100005];
int top;
vector<int> G[100005];
int tdep[2 * 100005];
int tdad[2 * 100005];
int tbio[2 * 100005];
int link[2 * 100005][19];
int comp[2 * 100005][19];
int good[2 * 100005];
vector<int> T[2 * 100005];
vector<int> g[100005];
vector<pair<int, int> > E;
queue<int> q;
int color[100005];
bool bicolorable() {
  for (int i = 0; i < E.size(); ++i) {
    g[E[i].first].clear();
    color[E[i].first] = 0;
    g[E[i].second].clear();
    color[E[i].second] = 0;
  }
  while (!q.empty()) q.pop();
  int source = 0;
  for (int i = 0; i < E.size(); ++i) {
    source = E[i].first;
    g[E[i].first].push_back(E[i].second);
    g[E[i].second].push_back(E[i].first);
  }
  q.push(source);
  color[source] = 1;
  while (!q.empty()) {
    int n = q.front();
    q.pop();
    for (int i = 0; i < g[n].size(); ++i) {
      if (color[g[n][i]] && color[g[n][i]] != 3 - color[n]) return 0;
      if (!color[g[n][i]]) q.push(g[n][i]);
      color[g[n][i]] = 3 - color[n];
    }
  }
  return 1;
}
void dfs(int n, int d) {
  dep[n] = d;
  dis[n] = low[n] = ++now;
  for (int i = 0; i < G[n].size(); ++i) {
    if (G[n][i] == dad[n]) continue;
    if (dis[G[n][i]] && dis[G[n][i]] < dis[n]) {
      A[top] = n;
      B[top] = G[n][i];
      ++top;
      low[n] = min(low[n], dis[G[n][i]]);
    } else if (!dis[G[n][i]]) {
      int fa = find(n);
      int fb = find(G[n][i]);
      if (fa != fb) uf[fa] = fb;
      A[top] = n;
      B[top] = G[n][i];
      ++top;
      dad[G[n][i]] = n;
      dfs(G[n][i], d + 1);
      low[n] = min(low[n], low[G[n][i]]);
      if (low[G[n][i]] >= dis[n]) {
        cut[n] = 1;
        E.clear();
        ++CN;
        while (A[top] != n || B[top] != G[n][i]) {
          if (cut[A[top - 1]] || G[A[top - 1]].size() == 1) {
            T[A[top - 1]].push_back(CN);
            T[CN].push_back(A[top - 1]);
          }
          if (cut[B[top - 1]] || G[B[top - 1]].size() == 1) {
            T[B[top - 1]].push_back(CN);
            T[CN].push_back(B[top - 1]);
          }
          com[A[top - 1]] = com[B[top - 1]] = CN;
          E.push_back(make_pair(A[top - 1], B[top - 1]));
          --top;
        }
        good[CN] = !bicolorable();
      }
    }
  }
}
void tdfs(int n, int d) {
  tdep[n] = d;
  for (int i = 0; i < T[n].size(); ++i) {
    if (tbio[T[n][i]] || T[n][i] == tdad[n]) continue;
    tbio[T[n][i]] = 1;
    tdad[T[n][i]] = n;
    tdfs(T[n][i], d + 1);
  }
}
int main(void) {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; ++i) uf[i] = i;
  for (int i = 0; i < M; ++i) {
    scanf("%d%d", &a, &b);
    G[a].push_back(b);
    G[b].push_back(a);
  }
  CN = N;
  for (int i = 1; i <= N; ++i) {
    if (dis[i]) continue;
    cut[i] = 1;
    dfs(i, 1);
    tdfs(i, 1);
  }
  for (int i = 1; i <= CN; ++i) {
    link[i][0] = tdad[i];
    comp[i][0] |= good[tdad[i]];
  }
  for (int i = 1; i <= 18; ++i) {
    for (int j = 1; j <= CN; ++j) {
      link[j][i] = link[link[j][i - 1]][i - 1];
      comp[j][i] = comp[j][i - 1] || comp[link[j][i - 1]][i - 1];
    }
  }
  scanf("%d", &Q);
  for (int i = 0; i < Q; ++i) {
    scanf("%d%d", &a, &b);
    if (a == b)
      puts("No");
    else if (find(a) != find(b))
      puts("No");
    else if (dep[a] % 2 != dep[b] % 2)
      puts("Yes");
    else {
      if (!cut[a]) a = com[a];
      if (!cut[b]) b = com[b];
      bool good_comp = good[a] || good[b];
      if (tdep[a] < tdep[b]) swap(a, b);
      for (int i = 18; i >= 0; --i) {
        if (tdep[link[a][i]] >= tdep[b]) {
          good_comp |= comp[a][i];
          a = link[a][i];
        }
      }
      for (int i = 18; i >= 0; --i) {
        if (link[a][i] == link[b][i]) continue;
        good_comp |= comp[a][i];
        good_comp |= comp[b][i];
        a = link[a][i];
        b = link[b][i];
      }
      if (a != b) good_comp = good_comp || good[tdad[a]];
      puts(good_comp ? "Yes" : "No");
    }
  }
  return 0;
}
