#include <bits/stdc++.h>
using namespace std;
namespace zzc {
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  return x * f;
}
const int maxn = 2e5 + 5;
int head[maxn], son[maxn], siz[maxn], dfn[maxn], top[maxn], fa[maxn];
int val[maxn << 2], f[maxn], dep[maxn];
int n, m, q, cnt = 0, idx;
struct edge {
  int to, nxt;
} e[maxn << 1];
void add(int u, int v) {
  e[++cnt].to = v;
  e[cnt].nxt = head[u];
  head[u] = cnt;
}
int find(int x) { return f[x] == x ? x : f[x] = find(f[x]); }
void pushdown(int rt, int l, int r) {
  if (val[rt] == r - l + 1) {
    int mid = (l + r) >> 1;
    val[rt << 1] = mid - l + 1;
    val[rt << 1 | 1] = r - mid;
  }
}
void pushup(int rt) { val[rt] = val[rt << 1] + val[rt << 1 | 1]; }
void update(int rt, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) {
    val[rt] = r - l + 1;
    return;
  }
  pushdown(rt, l, r);
  int mid = (l + r) >> 1;
  if (ql <= mid) update(rt << 1, l, mid, ql, qr);
  if (qr > mid) update(rt << 1 | 1, mid + 1, r, ql, qr);
  pushup(rt);
}
void update_tree(int x, int y) {
  while (top[x] != top[y]) {
    if (dep[top[x]] < dep[top[y]]) swap(x, y);
    update(1, 1, n, dfn[top[x]], dfn[x]);
    x = fa[top[x]];
  }
  if (dep[x] < dep[y]) swap(x, y);
  update(1, 1, n, dfn[y] + 1, dfn[x]);
}
int query(int rt, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) return val[rt];
  pushdown(rt, l, r);
  int mid = (l + r) >> 1;
  int res = 0;
  if (ql <= mid) res += query(rt << 1, l, mid, ql, qr);
  if (qr > mid) res += query(rt << 1 | 1, mid + 1, r, ql, qr);
  return res;
}
int query_tree(int x, int y) {
  int res = 0;
  while (top[x] != top[y]) {
    if (dep[top[x]] < dep[top[y]]) swap(x, y);
    res += query(1, 1, n, dfn[top[x]], dfn[x]);
    x = fa[top[x]];
  }
  if (dep[x] < dep[y]) swap(x, y);
  res += query(1, 1, n, dfn[y], dfn[x]);
  return res;
}
void dfs1(int u, int ff) {
  dep[u] = dep[ff] + 1;
  fa[u] = ff;
  siz[u] = 1;
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == ff || dep[v]) continue;
    dfs1(v, u);
    siz[u] += siz[v];
    if (siz[son[u]] < siz[v]) son[u] = v;
  }
}
void dfs2(int u, int bel) {
  top[u] = bel;
  dfn[u] = ++idx;
  if (son[u]) dfs2(son[u], bel);
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == son[u] || dep[v] < dep[u]) continue;
    if (fa[v] == u) dfs2(v, v);
  }
}
void dfs3(int u) {
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == fa[u]) continue;
    if (fa[v] == u)
      dfs3(v);
    else if (dep[v] > dep[u])
      continue;
    else if (!((dep[u] - dep[v]) & 1))
      update_tree(u, v);
  }
}
void dfs4(int u) {
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == fa[u]) continue;
    if (fa[v] == u)
      dfs4(v);
    else if (dep[v] > dep[u])
      continue;
    else if ((dep[u] - dep[v]) & 1) {
      int tmp = query_tree(u, v) - query(1, 1, n, dfn[v], dfn[v]);
      if (tmp > 0) update_tree(u, v);
    }
  }
}
int lca(int x, int y) {
  while (top[x] != top[y]) {
    if (dep[top[x]] > dep[top[y]])
      x = fa[top[x]];
    else
      y = fa[top[y]];
  }
  return dep[x] < dep[y] ? x : y;
}
int dis(int x, int y) { return (dep[x] + dep[y] - (dep[lca(x, y)] << 1)); }
void work() {
  int a, b;
  n = read();
  m = read();
  for (int i = 1; i <= n; i++) f[i] = i;
  for (int i = 1; i <= m; i++) {
    a = read();
    b = read();
    add(a, b);
    add(b, a);
    int fx = find(a);
    int fy = find(b);
    f[fy] = fx;
  }
  for (int i = 1; i <= n; i++)
    if (!dep[i]) {
      dfs1(i, 0);
      dfs2(i, i);
      dfs3(i);
      dfs4(i);
    }
  q = read();
  for (int i = 1; i <= q; i++) {
    a = read();
    b = read();
    if (find(a) != find(b))
      printf("No\n");
    else {
      int tmp = lca(a, b);
      if (dis(a, b) & 1)
        printf("Yes\n");
      else if (query_tree(a, b) - query(1, 1, n, dfn[tmp], dfn[tmp]) > 0)
        printf("Yes\n");
      else
        printf("No\n");
    }
  }
}
}  // namespace zzc
int main() {
  zzc::work();
  return 0;
}
