#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int h[MAXN], n, m, q, par[MAXN], t1, t2;
bool seenv[MAXN], seen[MAXN], D[MAXN], cann, col[MAXN];
int colcomp[MAXN], recomp[MAXN];
pair<int, int> edg[MAXN];
vector<int> mat[MAXN];
set<int> S;
int gettar(int p, int v) {
  if (edg[p].first == v) return edg[p].second;
  return edg[p].first;
}
int dfs(int v, int hi) {
  int maxih = hi, tmp;
  h[v] = hi;
  seenv[v] = true;
  for (int i = 0; i < mat[v].size(); i++) {
    if (seen[mat[v][i]]) continue;
    int t = gettar(mat[v][i], v);
    if (!seenv[t]) {
      seen[mat[v][i]] = true;
      tmp = dfs(t, hi + 1);
      maxih = min(tmp, maxih);
      if (tmp <= hi) par[t] = v;
    } else
      maxih = min(maxih, h[t]);
  }
  return maxih;
}
int getpar(int v) {
  if (v == par[v]) return v;
  par[v] = getpar(par[v]);
  return par[v];
}
void dfsbip(int v, bool cole, int pari) {
  seenv[v] = true;
  col[v] = cole;
  for (int i = 0; i < mat[v].size(); i++) {
    int t = gettar(mat[v][i], v);
    if (getpar(t) == pari)
      if (!seenv[t])
        dfsbip(t, !cole, pari);
      else if (!cole != col[t])
        cann = false;
  }
}
void dfscol(int v, bool cole, int compid) {
  if (D[getpar(v)] && S.find(getpar(v)) != S.end()) return;
  if (D[getpar(v)]) S.insert(getpar(v));
  seenv[v] = true;
  col[v] = cole;
  colcomp[v] = compid;
  for (int i = 0; i < mat[v].size(); i++) {
    int t = gettar(mat[v][i], v);
    if (!seenv[t]) dfscol(t, !cole, compid);
  }
}
void dfscon(int v, int compid) {
  seenv[v] = true;
  recomp[v] = compid;
  for (int i = 0; i < mat[v].size(); i++) {
    int t = gettar(mat[v][i], v);
    if (!seenv[t]) dfscon(t, compid);
  }
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) par[i] = i;
  for (int i = 0; i < m; i++) {
    cin >> t1 >> t2;
    edg[i] = {t1, t2};
    mat[t1].push_back(i);
    mat[t2].push_back(i);
  }
  for (int i = 1; i <= n; i++)
    if (!seenv[i]) dfs(i, 0);
  fill_n(seenv, n + 1, 0);
  for (int i = 1; i <= n; i++)
    if (par[i] == i) {
      cann = true;
      dfsbip(i, 1, i);
      if (!cann) D[i] = 1;
    }
  fill_n(seenv, n + 1, 0);
  fill_n(col, n + 1, 0);
  int c = 1;
  for (int i = 1; i <= n; i++)
    if (!seenv[i]) {
      S.clear();
      dfscol(i, 0, c);
      c++;
    }
  c = 1;
  fill_n(seenv, n + 1, 0);
  for (int i = 1; i <= n; i++)
    if (!seenv[i]) dfscon(i, c), c++;
  cin >> q;
  for (int i = 0; i < q; i++) {
    cin >> t1 >> t2;
    if (recomp[t1] != recomp[t2])
      cout << "No" << endl;
    else if (colcomp[t1] != colcomp[t2])
      cout << "Yes" << endl;
    else if (col[t1] == col[t2])
      cout << "No" << endl;
    else
      cout << "Yes" << endl;
  }
}
