#include <bits/stdc++.h>
using namespace std;
const int N = 5e5;
const int LOGN = 20;
int tempo, nz;
int vis[N], low[N], seen[N];
int gcol[N], col[N];
bool odd[N];
vector<int> adj[N], edges, g[N], t[N];
stack<int> st;
bool color(int u, int c) {
  if (col[u] != -1) return col[u] == c;
  col[u] = c;
  for (int v : g[u])
    if (!color(v, c ^ 1)) return false;
  return true;
}
void tarjan(int u, int p) {
  vis[u] = low[u] = ++tempo;
  for (int k : adj[u]) {
    int v = edges[k];
    if (v == p) continue;
    if (!seen[k]) {
      seen[k] = seen[k ^ 1] = 1;
      st.push(k);
    }
    if (!vis[v]) {
      tarjan(v, u);
      low[u] = min(low[u], low[v]);
      if (low[v] >= vis[u]) {
        vector<int> e;
        int cur;
        do {
          cur = st.top();
          st.pop();
          e.push_back(cur);
        } while (cur != k);
        vector<int> comp;
        for (int kk : e)
          comp.push_back(edges[kk]), comp.push_back(edges[kk ^ 1]);
        sort(comp.begin(), comp.end());
        comp.erase(unique(comp.begin(), comp.end()), comp.end());
        for (int w : comp) g[w].clear(), col[w] = -1;
        for (int kk : e)
          g[edges[kk ^ 1]].push_back(edges[kk]),
              g[edges[kk]].push_back(edges[kk ^ 1]);
        odd[nz] = !color(comp.back(), 0);
        for (int w : comp) {
          t[w].push_back(nz);
          t[nz].push_back(w);
        }
        nz++;
      }
    } else
      low[u] = min(low[u], vis[v]);
  }
}
void gcolor(int u, int c) {
  if (vis[u]) return;
  vis[u] = 1;
  gcol[u] = c;
  for (int k : adj[u]) gcolor(edges[k], c ^ 1);
}
int P[N][LOGN], odds[N][LOGN];
int sta[N], nd[N];
void dfs(int u, int p) {
  sta[u] = ++tempo;
  P[u][0] = p;
  odds[u][0] = odd[u];
  for (int i = 1; i < LOGN; i++)
    if (P[u][i - 1] != -1)
      P[u][i] = P[P[u][i - 1]][i - 1],
      odds[u][i] = odds[P[u][i - 1]][i - 1] | odds[u][i - 1];
  for (int v : t[u])
    if (v != p) dfs(v, u);
  nd[u] = tempo;
}
bool anc(int p, int x) { return sta[p] <= sta[x] && sta[x] <= nd[p]; }
int LCA(int u, int v) {
  if (anc(u, v)) return u;
  for (int i = LOGN - 1; i >= 0; i--) {
    if (P[u][i] != -1 && !anc(P[u][i], v)) u = P[u][i];
  }
  if (P[u][0] != -1 && anc(P[u][0], v)) return P[u][0];
  return -1;
}
int lift(int u, int p) {
  if (u == p) return odd[u];
  int res = 0;
  for (int i = LOGN - 1; i >= 0; i--) {
    if (P[u][i] != -1 && !anc(P[u][i], p)) {
      res |= odds[u][i];
      u = P[u][i];
    }
  }
  return res | odds[u][1];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  nz = n;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    adj[a].push_back(edges.size());
    edges.push_back(b);
    adj[b].push_back(edges.size());
    edges.push_back(a);
  }
  for (int i = 0; i < n; i++)
    if (!vis[i]) gcolor(i, 0);
  memset(vis, 0, sizeof vis);
  for (int i = 0; i < n; i++)
    if (!vis[i]) tarjan(i, -1);
  memset(P, -1, sizeof P);
  for (int i = 0; i < nz; i++)
    if (!sta[i]) dfs(i, -1);
  int q;
  cin >> q;
  for (int i = 0; i < q; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    int w = LCA(a, b);
    if (w == -1)
      cout << "No" << endl;
    else if (lift(a, w) || lift(b, w) || gcol[a] != gcol[b])
      cout << "Yes" << endl;
    else
      cout << "No" << endl;
  }
}
