#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
int head[N], nxt[N * 2], to[N * 2], tot;
int vis[N], stp[N];
int dp[N][20];
int dfn[N], low[N], dep = 0;
int stk[N * 5], top = 0;
int belong[N], block = 0;
int odd[N], col[N];
void init() {
  memset(head, -1, sizeof(head));
  tot = 0;
}
void add(int x, int y) {
  to[tot] = y;
  nxt[tot] = head[x];
  head[x] = tot++;
}
void DFS_st(int u, int fa) {
  vis[u] = 1;
  stp[u] = stp[fa] + 1;
  dp[u][0] = fa;
  for (int i = 1; i < 20; i++) dp[u][i] = dp[dp[u][i - 1]][i - 1];
  for (int i = head[u]; ~i; i = nxt[i]) {
    int v = to[i];
    if (!vis[v]) DFS_st(v, u);
  }
}
void tarjan(int u, int fa) {
  dfn[u] = low[u] = ++dep;
  stk[top++] = u;
  vis[u] = 1;
  for (int i = head[u]; ~i; i = nxt[i]) {
    int v = to[i];
    if (v == fa) continue;
    if (!dfn[v]) {
      tarjan(v, u);
      low[u] = min(low[u], low[v]);
    } else if (vis[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] == dfn[u]) {
    block++;
    do {
      top--;
      belong[stk[top]] = block;
      vis[stk[top]] = 0;
    } while (stk[top] != u);
  }
}
void DFS(int u, int fa) {
  vis[u] = 1;
  for (int i = head[u]; ~i; i = nxt[i]) {
    int v = to[i];
    if (!vis[v]) {
      col[v] += col[u];
      DFS(v, u);
    }
  }
}
int LCA(int x, int y) {
  if (stp[x] < stp[y]) swap(x, y);
  int delta = stp[x] - stp[y];
  for (int i = 0; i < 20; i++)
    if (delta & (1 << i)) x = dp[x][i];
  if (x == y) return x;
  for (int i = 19; i >= 0; i--)
    if (dp[x][i] != dp[y][i]) x = dp[x][i], y = dp[y][i];
  return dp[x][0];
}
int main() {
  init();
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    add(x, y);
    add(y, x);
  }
  for (int u = 1; u <= n; u++)
    if (!vis[u]) DFS_st(u, 0);
  memset(vis, 0, sizeof(vis));
  for (int u = 1; u <= n; u++)
    if (!dfn[u]) tarjan(u, 0);
  for (int u = 1; u <= n; u++) {
    if (!odd[belong[u]]) {
      for (int i = head[u]; ~i; i = nxt[i]) {
        int v = to[i];
        if ((stp[u] + stp[v]) % 2 == 0 && belong[v] == belong[u]) {
          odd[belong[u]] = 1;
          break;
        }
      }
    }
  }
  for (int u = 1; u <= n; u++)
    if (belong[u] == belong[dp[u][0]] && dp[u][0] != 0 && odd[belong[u]])
      col[u]++;
  memset(vis, 0, sizeof(vis));
  for (int u = 1; u <= n; u++)
    if (!vis[u]) DFS(u, 0);
  int q;
  scanf("%d", &q);
  while (q--) {
    int u, v;
    scanf("%d%d", &u, &v);
    int lca = LCA(u, v);
    if (lca == 0) {
      printf("No\n");
    } else if ((stp[u] + stp[v] - stp[lca] * 2) % 2 == 1)
      printf("Yes\n");
    else {
      if (col[u] + col[v] != col[lca] * 2)
        printf("Yes\n");
      else
        printf("No\n");
    }
  }
  return 0;
}
