#include <bits/stdc++.h>
using namespace std;
long long n, m, q, fa[100010], fa2[100010], dep[100010], f[100010][25],
    par[100010], sum[100010];
bool vis[100010], odd[100010];
vector<long long> vt[100010];
long long getf(long long x) {
  if (x == fa[x]) {
    return x;
  }
  return fa[x] = getf(fa[x]);
}
long long getf2(long long x) {
  if (x == fa2[x]) {
    return x;
  }
  return fa2[x] = getf2(fa2[x]);
}
void dfs(long long x, long long lst, long long d) {
  vis[x] = true;
  par[x] = lst;
  dep[x] = d;
  long long i, j;
  for (i = 0; i < 22; i++) {
    f[x][i + 1] = f[f[x][i]][i];
  }
  for (i = 0; i < vt[x].size(); i++) {
    if (vt[x][i] != lst) {
      if (!vis[vt[x][i]]) {
        f[vt[x][i]][0] = x;
        dfs(vt[x][i], x, d + 1);
        if (odd[vt[x][i]] && getf2(x) == getf2(vt[x][i])) {
          odd[x] = true;
        }
      } else {
        if (dep[vt[x][i]] < dep[x]) {
          if ((dep[x] - dep[vt[x][i]]) % 2 == 0) {
            odd[x] = true;
          }
          j = getf2(x);
          while (dep[j] > dep[vt[x][i]] + 1) {
            fa2[j] = par[j];
            j = getf2(j);
          }
        }
      }
    }
  }
  return;
}
void dfs2(long long x, long long lst) {
  vis[x] = true;
  long long i;
  for (i = 0; i < vt[x].size(); i++) {
    if (!vis[vt[x][i]]) {
      if (odd[x] && getf2(x) == getf2(vt[x][i])) {
        odd[vt[x][i]] = true;
      }
      dfs2(vt[x][i], x);
    }
  }
  return;
}
void dfs3(long long x, long long lst) {
  vis[x] = true;
  sum[x] = odd[x];
  if (lst != -1) {
    sum[x] += sum[lst];
  }
  long long i;
  for (i = 0; i < vt[x].size(); i++) {
    if (!vis[vt[x][i]]) {
      dfs3(vt[x][i], x);
    }
  }
  return;
}
long long glca(long long x, long long y) {
  long long i;
  if (dep[x] < dep[y]) {
    swap(x, y);
  }
  for (i = 22; i >= 0; i--) {
    if (dep[f[x][i]] >= dep[y]) {
      x = f[x][i];
    }
    if (x == y) {
      return x;
    }
  }
  for (i = 22; i >= 0; i--) {
    if (f[x][i] != f[y][i]) {
      x = f[x][i];
      y = f[y][i];
    }
  }
  return f[x][0];
}
int main() {
  long long i, j, x, y, a, b;
  scanf("%lld%lld", &n, &m);
  for (i = 0; i < n; i++) {
    fa[i] = i;
  }
  for (i = 0; i < m; i++) {
    scanf("%lld%lld", &x, &y);
    x--;
    y--;
    vt[x].push_back(y);
    vt[y].push_back(x);
    a = getf(x);
    b = getf(y);
    fa[b] = a;
  }
  for (i = 0; i < n; i++) {
    fa[i] = getf(i);
    fa2[i] = i;
    odd[i] = false;
  }
  memset(vis, false, sizeof(vis));
  for (i = 0; i < n; i++) {
    if (!vis[i]) {
      dfs(i, -1, 0);
    }
  }
  memset(vis, false, sizeof(vis));
  for (i = 0; i < n; i++) {
    if (!vis[i]) {
      dfs2(i, -1);
    }
  }
  memset(vis, false, sizeof(vis));
  memset(sum, 0, sizeof(sum));
  for (i = 0; i < n; i++) {
    if (!vis[i]) {
      dfs3(i, -1);
    }
  }
  scanf("%lld", &q);
  while (q--) {
    scanf("%lld%lld", &x, &y);
    x--;
    y--;
    if (fa[x] != fa[y] || x == y) {
      puts("No");
      continue;
    }
    a = glca(x, y);
    if ((dep[x] + dep[y] - dep[a] * 2) % 2 == 1) {
      puts("Yes");
    } else if ((sum[x] - sum[a]) != 0) {
      puts("Yes");
    } else if ((sum[y] - sum[a]) != 0) {
      puts("Yes");
    } else {
      puts("No");
    }
  }
  return 0;
}
