def depth_first_search a_list, st, v_group, cnt
  while st.length > 0
    i = st.last
    v_group[i] = cnt
    found = false
    a_list[i].each do |a|
      unless v_group[a]
        st.push(a)
        found = true
        break
      end
    end
    st.pop unless found
  end
end

users_count, n = gets.chomp.split(' ').map(&:to_i)

a_list = Array.new(users_count).map{|m| []} # 隣接リスト
n.times do
  i, j = gets.chomp.split(' ').map(&:to_i)
  a_list[i].push(j)
  a_list[j].push(i)
end

v_group = Array.new(users_count, false) # 頂点のグループ分け
cnt = 1
0.upto(users_count - 1) do |i|
  next if v_group[i]
  depth_first_search(a_list, [i], v_group, cnt)
  cnt += 1
end
q_cnt = gets.chomp.to_i
ans = []
q_cnt.times do
  f1, f2 = gets.chomp.split(' ').map(&:to_i)
  ans.push((v_group[f1] && v_group[f1] == v_group[f2]) ? 'yes' : 'no')
end
puts ans.join("\n")
