#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = x * 10 + c - 48, c = getchar();
  return x;
}
inline int Min(int a, int b) { return a < b ? a : b; }
const int N = 1e5 + 5;
int head[N], to[N << 1], net[N << 1], cnt;
int dfn[N], low[N], num;
int sta[N], gs[N], tot;
int dep[N], co[N], f[N][20], l[N][20];
bool ins[N], jojo[N], rt[N];
int n, m, q, ln, ans, color;
inline void add(int x, int y) {
  net[++cnt] = head[x];
  to[cnt] = y;
  head[x] = cnt;
  net[++cnt] = head[y];
  to[cnt] = x;
  head[y] = cnt;
}
void tarjan(int now, int from) {
  int i;
  co[now] = color;
  dfn[now] = low[now] = ++num;
  dep[now] = dep[from] + 1;
  f[now][0] = from;
  sta[++tot] = now;
  ins[now] = true;
  for (int i = 1; i <= ln; ++i) f[now][i] = f[f[now][i - 1]][i - 1];
  for (i = head[now]; i; i = net[i]) {
    int nxt = to[i];
    if (nxt == from) continue;
    if (!dfn[nxt]) {
      tarjan(nxt, now);
      low[now] = Min(low[now], low[nxt]);
    } else if (ins[nxt]) {
      low[now] = min(dfn[nxt], low[now]);
      if ((dep[now] & 1) == (dep[nxt] & 1)) jojo[now] = true;
    }
  }
  ins[now] = false;
  if (dfn[now] != low[now]) return;
  bool pzk = false;
  for (int i = tot; i >= 1; i--) {
    if (sta[i] == now) break;
    if (jojo[sta[i]]) {
      pzk = true;
      break;
    }
  }
  if (pzk) {
    while (tot && sta[tot] != now) {
      gs[sta[tot]]++;
      ins[sta[tot]] = false;
      tot--;
    }
    tot--;
  } else {
    while (tot && sta[tot] != now) {
      ins[sta[tot]] = false;
      tot--;
    }
    tot--;
  }
}
inline int LCA(int x, int y) {
  int i;
  if (dep[x] < dep[y]) swap(x, y);
  for (i = ln; i >= 0; --i)
    if (dep[f[x][i]] >= dep[y]) x = f[x][i];
  if (x == y) return x;
  for (i = ln; i >= 0; --i) {
    if (f[x][i] != f[y][i]) {
      x = f[x][i];
      y = f[y][i];
    }
  }
  return f[x][0];
}
void dfs(int now) {
  for (int i = head[now]; i; i = net[i]) {
    int t = to[i];
    if (f[t][0] == now) {
      gs[t] += gs[now];
      dfs(t);
    }
  }
}
int main() {
  n = read();
  m = read();
  int x, y;
  for (int i = 1; i <= m; ++i) x = read(), y = read(), add(x, y);
  q = read();
  ln = log(n) / log(2);
  for (int i = 1; i <= n; ++i) {
    if (!dfn[i]) {
      color++;
      tarjan(i, 0);
      rt[i] = true;
    }
  }
  for (int i = 1; i <= n; ++i)
    if (rt[i]) dfs(i);
  int lca;
  while (q--) {
    x = read();
    y = read();
    if (co[x] != co[y])
      puts("No");
    else {
      lca = LCA(x, y);
      int len = dep[x] + dep[y] - 2 * dep[lca];
      if (len & 1 || gs[x] + gs[y] - 2 * gs[lca])
        puts("Yes");
      else
        puts("No");
    }
  }
  return 0;
}
