#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const int oo = ~0u >> 2, mo = (int)1e9 + 7;
const int mn = 110000, mm = 110000 * 2, ml = 18;
struct Edge {
  int y, l;
} E[mm];
int g[mn], d[mn], s[mn], blg[mn];
int fa[mn][ml], f[mn];
bool o[mn];
int n, m, tt(1);
void add(int x, int y) {
  E[++tt].y = y, E[tt].l = g[x], g[x] = tt;
  E[++tt].y = x, E[tt].l = g[y], g[y] = tt;
}
int LOG2(int x) {
  int t = (int)log2(x);
  while ((1 << t) > x) --t;
  while ((1 << (t + 1)) <= x) ++t;
  return t;
}
int find(int x) {
  int i = x, t;
  while (f[i] != i) i = f[i];
  while (x != i) t = f[x], f[x] = i, x = t;
  return x;
}
struct Stack {
  int x, i;
  Stack() {}
  Stack(int _x) { x = _x, i = -1; }
  void init(int _x) { x = _x, i = -1; }
} Q[mn];
void init() {
  for (int i = 1; i <= n; ++i)
    if (!d[i]) {
      int r = 0;
      d[i] = 1, fa[i][0] = i, blg[i] = i, f[i] = i;
      Q[++r].init(i);
      while (r) {
        int x = Q[r].x, &i = Q[r].i, y;
        (d[0] = max(d[0], d[x]));
        if (i == -1)
          f[x] = x, i = g[x];
        else {
          y = E[i].y;
          if (find(x) == find(y)) o[x] |= o[y];
          i = E[i].l;
        }
        y = E[i].y;
        if (!i) {
          --r;
          continue;
        }
        if (!d[y]) {
          d[y] = d[x] + 1, fa[y][0] = x, blg[y] = blg[x], f[y] = y;
          Q[++r].init(y);
        } else if (d[x] > d[y] + 1) {
          int z = find(x);
          while (d[z] > d[y] + 1) f[z] = fa[z][0], z = find(z);
          o[x] |= !((d[x] - d[y]) % 2);
        }
      }
      Q[r = 1].init(i);
      while (r) {
        int x = Q[r].x, &i = Q[r].i, y;
        if (i == -1)
          s[x] += o[find(x)], i = g[x];
        else
          i = E[i].l;
        y = E[i].y;
        if (!i) {
          --r;
          continue;
        }
        if (d[y] == d[x] + 1) {
          if (find(x) == find(y)) o[y] |= o[x];
          s[y] = s[x], Q[++r].init(y);
        }
      }
    }
  int t = LOG2(d[0]);
  for (int j = 1; j <= t; ++j)
    for (int i = 1; i <= n; ++i) fa[i][j] = fa[fa[i][j - 1]][j - 1];
}
int lca(int x, int y) {
  if (d[x] < d[y]) swap(x, y);
  while (d[x] > d[y]) x = fa[x][LOG2(d[x] - d[y])];
  if (x == y) return x;
  for (int i = LOG2(d[x]); i >= 0; --i)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    add(x, y);
  }
  init();
  scanf("%d", &tt);
  while (tt--) {
    int x, y, z;
    scanf("%d%d", &x, &y);
    if (blg[x] != blg[y]) {
      printf("No\n");
      continue;
    }
    z = lca(x, y);
    if (((d[x] + d[y]) & 1) || s[x] + s[y] - 2 * s[z])
      printf("Yes\n");
    else
      printf("No\n");
  }
}
