#include <bits/stdc++.h>
using namespace std;
struct edge {
  int to, next;
} e[200010];
int n, m, q, cnt, father[100010], fa[100010][30], a[100010], dis[100010],
    deep[100010], head[100010];
inline void add(int u, int v) {
  cnt++;
  e[cnt].to = v;
  e[cnt].next = head[u];
  head[u] = cnt;
}
inline int find(int x) {
  return father[x] == x ? x : father[x] = find(father[x]);
}
inline void dfs(int u) {
  deep[u] = deep[fa[u][0]] + 1;
  for (int i = head[u]; i; i = e[i].next) {
    int v = e[i].to;
    if (!deep[v]) {
      fa[v][0] = u;
      dfs(v);
      if (find(u) == find(v)) a[u] |= a[v];
    } else if (deep[v] < deep[u] - 1) {
      if ((deep[u] + deep[v] + 1) & 1) a[u] = 1;
      for (int x = find(u); deep[x] > deep[v] + 1; x = find(x))
        father[x] = fa[x][0];
    }
  }
}
inline void dfs2(int u) {
  dis[u] += a[u];
  for (int i = head[u]; i; i = e[i].next) {
    int v = e[i].to;
    if (deep[v] != deep[u] + 1) continue;
    if (find(u) == find(v)) a[v] |= a[u];
    dis[v] = dis[u];
    dfs2(v);
  }
}
inline int LCA(int x, int y) {
  if (deep[x] > deep[y]) swap(x, y);
  for (int i = 20; i >= 0; i--)
    if (deep[fa[y][i]] >= deep[x]) y = fa[y][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];
}
inline bool check(int u, int v) {
  if (!LCA(u, v)) return 0;
  if ((deep[u] + deep[v]) & 1) return 1;
  if (dis[u] + dis[v] - 2 * dis[LCA(u, v)]) return 1;
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) father[i] = i;
  for (int i = 1, x, y; i <= m; i++) {
    scanf("%d%d", &x, &y);
    add(x, y);
    add(y, x);
  }
  for (int i = 1; i <= n; i++)
    if (!deep[i]) dfs(i), dfs2(i);
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= n; j++) fa[j][i] = fa[fa[j][i - 1]][i - 1];
  scanf("%d", &q);
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (check(x, y))
      puts("Yes");
    else
      puts("No");
  }
  return 0;
}
