#include <bits/stdc++.h>
using namespace std;
int p[400020], n1[400020], h[200010], ee = 0, q[200010], up[200010],
                                      anc[20][200010], n, m, Q, d[200010],
                                      sum[200010], tot = 0;
void ae(int x, int y) {
  p[ee] = y;
  n1[ee] = h[x];
  h[x] = ee++;
}
int lca(int x, int y) {
  if (d[x] < d[y]) swap(x, y);
  int k = d[x] - d[y], j = 0;
  for (int k = d[x] - d[y], j = 0; k; k >>= 1, j++)
    if (k & 1) x = anc[j][x];
  if (x == y) return x;
  for (int i = 17; ~i; i--)
    if (anc[i][x] != anc[i][y]) x = anc[i][x], y = anc[i][y];
  return anc[0][x];
}
void dfs(int u) {
  q[++tot] = u;
  for (int i = h[u]; ~i; i = n1[i]) {
    if (!~d[p[i]]) {
      d[p[i]] = d[u] + 1;
      anc[0][p[i]] = u;
      dfs(p[i]);
    } else if (d[u] - d[p[i]] > 1 && (d[u] - d[p[i]]) % 2 == 0)
      up[u] = max(up[u], d[p[i]]);
  }
}
pair<int, int> qq[200010];
vector<int> g[200010];
void check() {
  int tail;
  for (int i = 1; i <= n; i++)
    if (d[i] == -1) {
      d[i] = 0;
      qq[1] = make_pair(i, 0);
      tail = 1;
      q[++tot] = i;
      while (tail) {
        int &x = qq[tail].first, &e = qq[tail].second;
        if (e >= g[x].size()) {
          --tail;
          continue;
        }
        for (; e < g[x].size(); e++) {
          int y = g[x][e];
          if (d[y] == -1) {
            q[++tot] = y;
            d[y] = d[x] + 1;
            anc[0][y] = x;
            qq[++tail] = make_pair(y, 0);
            break;
          } else {
            if (d[x] - d[y] > 1 && (d[x] - d[y]) % 2 == 0) {
              up[x] = max(up[x], d[y]);
            }
          }
        }
      }
    }
}
void init() {
  int s = 1, e = 1;
  memset(d, -1, sizeof(d));
  memset(up, -1, sizeof(up));
  check();
  for (int i = 1; i <= n; i++)
    if (anc[0][q[i]]) up[q[i]] = max(up[q[i]], up[anc[0][q[i]]]);
  for (int i = 1; i <= n; i++) {
    for (int j = h[i]; ~j; j = n1[j]) {
      int v = p[j];
      if (d[i] >= d[v] || anc[0][v] == i || anc[0][i] == v) continue;
      if ((d[v] - d[i]) & 1) {
        if (up[v] >= d[i]) --sum[i], ++sum[v];
      } else
        --sum[i], ++sum[v];
    }
  }
  for (int i = n; i; i--)
    if (anc[0][q[i]]) sum[anc[0][q[i]]] += sum[q[i]];
  for (int i = 1; i <= n; i++)
    if (anc[0][q[i]]) sum[q[i]] += sum[anc[0][q[i]]];
  for (int i = 1; i <= 17; i++)
    for (int j = 1; j <= n; j++) anc[i][j] = anc[i - 1][anc[i - 1][j]];
}
int main() {
  scanf("%d%d", &n, &m);
  memset(h, -1, sizeof(h));
  int x, y;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
    ae(x, y);
    ae(y, x);
  }
  init();
  scanf("%d", &Q);
  while (Q--) {
    scanf("%d%d", &x, &y);
    int l = lca(x, y), fl = 0;
    if (l >= 1 && l <= n && x != y)
      if ((d[x] + d[y]) % 2 == 1 || sum[x] + sum[y] - 2 * sum[l] > 0) fl = 1;
    if (fl)
      printf("Yes\n");
    else
      printf("No\n");
  }
  return 0;
}
