#include <bits/stdc++.h>
using namespace std;
long long n, m, q, fa[200010], dep[200010], dep2[200010], f2[200010][25],
    f[200010][25], lw[200010], din[200010], par[200010],
    cnt = 0, cnt2 = 0, sum[200010], col[200010];
bool vis[200010], odd[200010];
vector<long long> sz[200010], vt[200010], vt2[200010];
stack<long long> stk;
long long getf(long long x) {
  if (x == fa[x]) {
    return x;
  }
  return fa[x] = getf(fa[x]);
}
void dfs(long long x, long long lst, long long d) {
  vis[x] = true;
  lw[x] = din[x] = ++cnt;
  dep[x] = d;
  long long i;
  for (i = 0; i < 22; i++) {
    f[x][i + 1] = f[f[x][i]][i];
  }
  for (i = 0; i < vt[x].size(); i++) {
    if (vt[x][i] != lst) {
      if (vis[vt[x][i]]) {
        lw[x] = min(lw[x], din[vt[x][i]]);
      } else {
        stk.push(vt[x][i]);
        f[vt[x][i]][0] = x;
        dfs(vt[x][i], x, d + 1);
        lw[x] = min(lw[x], lw[vt[x][i]]);
        if (lw[vt[x][i]] >= din[x]) {
          while (stk.top() != vt[x][i]) {
            sz[cnt2].push_back(stk.top());
            stk.pop();
          }
          sz[cnt2].push_back(stk.top());
          stk.pop();
          sz[cnt2++].push_back(x);
        }
      }
    }
  }
  return;
}
void dfs2(long long x, long long lst, long long d) {
  vis[x] = true;
  par[x] = lst;
  if (odd[x]) {
    sum[x] = 1;
  } else {
    sum[x] = 0;
  }
  if (lst != -1) {
    sum[x] += sum[lst];
  }
  dep2[x] = d;
  long long i;
  for (i = 0; i < 22; i++) {
    f2[x][i + 1] = f2[f2[x][i]][i];
  }
  for (i = 0; i < vt2[x].size(); i++) {
    if (!vis[vt2[x][i]]) {
      f2[vt2[x][i]][0] = x;
      dfs2(vt2[x][i], x, d + 1);
    }
  }
  return;
}
long long glca(long long x, long long y) {
  long long i;
  if (dep[x] < dep[y]) {
    swap(x, y);
  }
  for (i = 22; i >= 0; i--) {
    if (dep[f[x][i]] >= dep[y]) {
      x = f[x][i];
    }
    if (x == y) {
      return x;
    }
  }
  for (i = 22; i >= 0; i--) {
    if (f[x][i] != f[y][i]) {
      x = f[x][i];
      y = f[y][i];
    }
  }
  return f[x][0];
}
long long glca2(long long x, long long y) {
  long long i;
  if (dep2[x] < dep2[y]) {
    swap(x, y);
  }
  for (i = 22; i >= 0; i--) {
    if (dep2[f2[x][i]] >= dep2[y]) {
      x = f2[x][i];
    }
    if (x == y) {
      return x;
    }
  }
  for (i = 22; i >= 0; i--) {
    if (f2[x][i] != f2[y][i]) {
      x = f2[x][i];
      y = f2[y][i];
    }
  }
  return f2[x][0];
}
void fd(long long id) {
  long long i, x, p;
  queue<long long> q;
  for (i = 0; i < sz[id].size(); i++) {
    vis[sz[id][i]] = false;
  }
  odd[id + n] = false;
  col[sz[id][0]] = 0;
  vis[sz[id][0]] = true;
  q.push(sz[id][0]);
  while (!q.empty()) {
    x = q.front();
    q.pop();
    for (i = 0; i < vt[x].size(); i++) {
      p = lower_bound(sz[id].begin(), sz[id].end(), vt[x][i]) - sz[id].begin();
      if (p >= sz[id].size() || sz[id][p] != vt[x][i]) {
        continue;
      }
      if (!vis[vt[x][i]]) {
        col[vt[x][i]] = col[x] ^ 1;
        vis[vt[x][i]] = true;
        q.push(vt[x][i]);
      } else if (col[vt[x][i]] == col[x]) {
        odd[id + n] = true;
        return;
      }
    }
  }
  return;
}
int main() {
  long long i, j, x, y, a, b;
  scanf("%lld%lld", &n, &m);
  for (i = 0; i < n; i++) {
    fa[i] = i;
  }
  for (i = 0; i < m; i++) {
    scanf("%lld%lld", &x, &y);
    x--;
    y--;
    vt[x].push_back(y);
    vt[y].push_back(x);
    a = getf(x);
    b = getf(y);
    fa[b] = a;
  }
  for (i = 0; i < n; i++) {
    fa[i] = getf(i);
  }
  memset(vis, false, sizeof(vis));
  for (i = 0; i < n; i++) {
    if (!vis[i]) {
      dfs(i, -1, 9);
    }
  }
  for (i = 0; i < cnt2; i++) {
    sort(sz[i].begin(), sz[i].end());
    fd(i);
    for (j = 0; j < sz[i].size(); j++) {
      vt2[sz[i][j]].push_back(i + n);
      vt2[i + n].push_back(sz[i][j]);
    }
  }
  memset(vis, false, sizeof(vis));
  memset(sum, 0, sizeof(sum));
  for (i = 0; i < n + cnt2; i++) {
    if (!vis[i]) {
      dfs2(i, -1, 0);
    }
  }
  scanf("%lld", &q);
  while (q--) {
    scanf("%lld%lld", &x, &y);
    x--;
    y--;
    if (fa[x] != fa[y] || x == y) {
      puts("No");
      continue;
    }
    a = glca(x, y);
    b = glca2(x, y);
    b = par[b];
    if (b == -1) {
      if (sum[y] != 0 || sum[x] != 0) {
        puts("Yes");
        continue;
      }
    } else {
      if (sum[y] - sum[b] != 0) {
        puts("Yes");
        continue;
      } else if (sum[x] - sum[b] != 0) {
        puts("Yes");
        continue;
      }
    }
    if ((dep[x] + dep[y] - dep[a] * 2) % 2 == 1) {
      puts("Yes");
    } else {
      puts("No");
    }
  }
  return 0;
}
