#include <bits/stdc++.h>
using namespace std;
template <typename _Tp>
inline _Tp read(_Tp& x) {
  char c11 = getchar(), ob = 0;
  x = 0;
  while (c11 ^ '-' && !isdigit(c11)) c11 = getchar();
  if (c11 == '-') c11 = getchar(), ob = 1;
  while (isdigit(c11)) x = x * 10 + c11 - '0', c11 = getchar();
  if (ob) x = -x;
  return x;
}
void file(void) {}
int n, m, val[200005], head[200005], cnt, f[200005], dfn[200005], low[200005],
    idx, dep[200005], vis[200005], st[200005], top, g[200005], tot,
    head2[200005], y, fa[200005][22];
struct edge {
  int to, next, v;
} e[1000005];
void add(int a, int b) {
  e[cnt].to = b;
  e[cnt].next = head[a];
  head[a] = cnt++;
}
void add2(int a, int b) {
  e[cnt].to = b;
  e[cnt].next = head2[a];
  head2[a] = cnt++;
}
int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); }
void work(int u) {
  int flag = 0;
  for (int i = 1; i <= tot; i++) {
    int x = e[g[i]].to;
    for (int j = head2[x]; j; j = e[j].next)
      if (u != x && dep[x] == dep[e[j].to]) flag = 1;
    x = e[g[i] ^ 1].to;
    for (int j = head2[x]; j; j = e[j].next)
      if (u != x && dep[x] == dep[e[j].to]) flag = 1;
  }
  if (flag) {
    for (int i = 1; i <= tot; i++) e[g[i]].v = e[g[i] ^ 1].v = 1;
  }
}
void tarjan(int u, int pre) {
  dfn[u] = low[u] = ++idx;
  dep[u] = dep[pre] ^ 1;
  for (int i = head[u]; i; i = e[i].next) {
    if (e[i].to == pre) continue;
    if (!dfn[e[i].to]) {
      st[++top] = i;
      tarjan(e[i].to, u);
      low[u] = min(low[u], low[e[i].to]);
      if (low[e[i].to] >= dfn[u]) {
        y = 0, tot = 0;
        while (y != i) {
          y = st[top];
          top--;
          g[++tot] = y;
        }
        work(u);
      }
    } else {
      low[u] = min(low[u], dfn[e[i].to]);
      if (dfn[e[i].to] < dfn[u]) add2(u, e[i].to);
    }
  }
}
void prepare(int u) {
  vis[u] = 1;
  dep[u] = dep[fa[u][0]] + 1;
  for (int i = 1; i <= 20; ++i) {
    fa[u][i] = fa[fa[u][i - 1]][i - 1];
  }
  for (int i = head[u]; i; i = e[i].next) {
    if (vis[e[i].to]) continue;
    fa[e[i].to][0] = u;
    val[e[i].to] = val[u] + e[i].v;
    prepare(e[i].to);
  }
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = 20; i >= 0; --i) {
    if (dep[fa[x][i]] >= dep[y]) x = fa[x][i];
  }
  if (x == y) return x;
  for (int i = 20; i >= 0; --i) {
    if (fa[x][i] != fa[y][i]) {
      x = fa[x][i];
      y = fa[y][i];
    }
  }
  return fa[x][0];
}
int main() {
  read(n);
  idx = 0;
  cnt = 2;
  top = 0;
  tot = 0;
  read(m);
  int a, b;
  for (int i = 1; i <= n; ++i) f[i] = i;
  for (int i = 1; i <= m; ++i) {
    read(a);
    read(b);
    add(a, b);
    add(b, a);
    if (find(a) != find(b)) f[find(a)] = find(b);
  }
  for (int i = 1; i <= n; ++i)
    if (!dfn[i]) tarjan(i, 0);
  for (int i = 1; i <= n; ++i)
    if (!vis[i]) prepare(i);
  int q;
  read(q);
  while (q--) {
    read(a);
    read(b);
    int lc = lca(a, b);
    if (find(a) != find(b))
      puts("No");
    else if ((dep[a] & 1) != (dep[b] & 1))
      puts("Yes");
    else if (val[a] + val[b] - 2 * val[lc])
      puts("Yes");
    else
      puts("No");
  }
}
