#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > Mat;
vector<int> Grafo;
vector<int> Entrada;
vector<int> Rev;
vector<int> Aristas;
stack<int> STACK;
vector<int> Backi;
int grafos;
bool dfs(int A, int i, int pos) {
  Grafo[A] = grafos;
  Entrada[A] = pos;
  Backi[A] = pos;
  bool J = false;
  for (int I = 0; I < Mat[A].size(); I++) {
    if (Mat[A][I].first != i) {
      if (Grafo[Mat[A][I].first] == 0) {
        STACK.push(Mat[A][I].second);
        bool JJ = dfs(Mat[A][I].first, A, pos + 1);
        Backi[A] = min(Backi[A], Backi[Mat[A][I].first]);
        if (i == -1 || (i != -1 && Backi[Mat[A][I].first] >= Entrada[A])) {
          if (JJ) {
            int UU = STACK.top();
            STACK.pop();
            while (UU != Mat[A][I].second) {
              Aristas[UU] = 1;
              UU = STACK.top();
              STACK.pop();
            }
            Aristas[Mat[A][I].second] = 1;
          } else {
            int UU = STACK.top();
            STACK.pop();
            while (UU != Mat[A][I].second) {
              UU = STACK.top();
              STACK.pop();
            }
          }
        } else {
          if (JJ) J = JJ;
        }
      } else if (Entrada[Mat[A][I].first] < Entrada[A]) {
        if ((Entrada[A] - Entrada[Mat[A][I].first]) % 2 == 0) {
          J = true;
        }
        STACK.push(Mat[A][I].second);
        Backi[A] = min(Backi[A], Backi[Mat[A][I].first]);
      }
    }
  }
  return J;
}
int main() {
  int N, A, B, C;
  scanf("%d%d", &N, &A);
  Mat.resize(N);
  for (int I = 0; I < A; I++) {
    scanf("%d%d", &B, &C);
    B--;
    C--;
    Mat[B].push_back(make_pair(C, I));
    Mat[C].push_back(make_pair(B, I));
  }
  Backi.resize(N);
  Aristas.resize(A);
  Grafo.resize(N);
  grafos = 1;
  Entrada.resize(N);
  Entrada.resize(0);
  Entrada.resize(N);
  Rev.resize(N);
  for (int I = 0; I < N; I++) {
    if (Grafo[I] == 0) {
      bool OO = dfs(I, -1, 0);
      grafos++;
    }
  }
  vector<int> Distancias(N);
  vector<int> CC(N), Rev3(N);
  int cont = 0;
  int var;
  for (int I = 0; I < N; I++) {
    if (Rev3[I] == 0) {
      cont++;
      queue<int> COLA;
      COLA.push(I);
      Distancias[I] = 1;
      CC[I] = cont;
      Rev3[I] = 1;
      while (!COLA.empty()) {
        int KKK = COLA.front();
        COLA.pop();
        CC[KKK] = cont;
        Rev3[KKK] = 1;
        for (int I2 = 0; I2 < Mat[KKK].size(); I2++) {
          var = Mat[KKK][I2].first;
          if (Aristas[Mat[KKK][I2].second] == 0 && Rev3[var] == 0) {
            Distancias[var] = Distancias[KKK] + 1;
            COLA.push(var);
            Rev3[var] = 1;
          }
        }
      }
    }
  }
  int MM, AA, BB;
  scanf("%d", &MM);
  for (int I = 0; I < MM; I++) {
    scanf("%d%d", &AA, &BB);
    AA--;
    BB--;
    if (Grafo[AA] != Grafo[BB] || AA == BB) {
      printf("No\n");
    } else {
      if (CC[AA] != CC[BB])
        printf("Yes\n");
      else {
        if ((Distancias[AA] + Distancias[BB] + 1) % 2 == 0) {
          printf("Yes\n");
        } else
          printf("No\n");
      }
    }
  }
  return 0;
}
