#include <bits/stdc++.h>
using namespace std;
pair<int, int> edges[200105];
int C[200105], D[200105], temp[200105], sum[200105], num[200105], low[200105],
    disc[200105], vis[200105], cno, comp[200105], pa[19][200105], artic[200105],
    tim;
stack<int> stk;
set<int> s[200105];
vector<pair<int, int> > g[200105];
vector<int> t[200105];
void put() {
  s[cno].insert(edges[stk.top()].first);
  s[cno].insert(edges[stk.top()].second);
  stk.pop();
}
void setTraverse() {
  for (int j : s[cno]) {
    if (artic[j]) {
      t[cno].push_back(comp[j]);
      t[comp[j]].push_back(cno);
    } else
      comp[j] = cno;
  }
}
void dfs(int a, int p, int f = 1) {
  low[a] = disc[a] = ++tim;
  temp[a] = f;
  vis[a] = 1;
  int child = 0;
  for (pair<int, int> i : g[a]) {
    if (!vis[i.first]) {
      child++;
      stk.push(i.second);
      dfs(i.first, a, f ^ 1);
      low[a] = min(low[a], low[i.first]);
      if ((disc[a] == 1 && child > 1) ||
          (disc[a] != 1 && low[i.first] >= disc[a])) {
        cno++;
        artic[a] = 1;
        if (comp[a] == 0) {
          comp[a] = cno;
          s[cno].insert(a);
          cno++;
          s[cno].insert(a);
        }
        while (stk.top() != i.second) put();
        put();
        setTraverse();
      }
    } else if (i.first != p && disc[i.first] < low[a]) {
      low[a] = min(low[a], disc[i.first]);
      stk.push(i.second);
    }
  }
}
void buildTree(int n) {
  for (__typeof(n) j = 1; j <= n; j++) {
    if (!vis[j]) {
      tim = 0;
      dfs(j, j);
      if (!stk.empty()) {
        cno++;
        while (!stk.empty()) put();
        setTraverse();
      }
    }
  }
}
void dfs2(int a, int p, int c) {
  vis[a] = 1;
  sum[a] += num[a];
  pa[0][a] = p;
  C[a] = c;
  for (int i : t[a]) {
    if (!vis[i]) {
      D[i] = D[a] + 1;
      sum[i] = sum[a];
      dfs2(i, a, c);
    }
  }
}
int lca(int a, int b) {
  if (D[b] > D[a]) swap(a, b);
  int diff = D[a] - D[b];
  for (int i = 0; i < 19; i++)
    if (diff & (1 << i)) a = pa[i][a];
  if (a == b) return a;
  for (int i = 19 - 1; i >= 0; i--)
    if (pa[i][a] != pa[i][b]) {
      a = pa[i][a];
      b = pa[i][b];
    }
  return pa[0][a];
}
int main() {
  int n, m, q;
  scanf("%d %d", &n, &m);
  for (__typeof(m) i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    edges[i + 1] = {a, b};
    g[a].emplace_back(b, i + 1);
    g[b].emplace_back(a, i + 1);
  }
  scanf("%d", &q);
  buildTree(n);
  memset(vis, 0, sizeof vis);
  for (int i = 1; i <= cno; i++) {
    for (int j : s[i]) {
      for (pair<int, int> k : g[j]) {
        if (s[i].count(k.first) && temp[j] == temp[k.first]) {
          num[i] = 1;
          break;
        }
      }
      if (num[i]) break;
    }
  }
  for (__typeof(cno) i = 1; i <= cno; i++) {
    if (!vis[i]) {
      dfs2(i, 0, i);
    }
  }
  for (int i = 1; i < 19; i++) {
    for (int j = 1; j <= cno; j++) pa[i][j] = pa[i - 1][pa[i - 1][j]];
  }
  for (__typeof(q) i = 0; i < q; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    int k = 0;
    if (C[comp[a]] != C[comp[b]] || a == b)
      k = 0;
    else if (temp[a] ^ temp[b])
      k = 1;
    else {
      a = comp[a];
      b = comp[b];
      int c = lca(a, b);
      if (sum[a] + sum[b] - 2 * sum[c] + num[c])
        k = 1;
      else
        k = 0;
    }
    if (k)
      printf("Yes\n");
    else
      printf("No\n");
  }
  return 0;
}
