// -----------------------------------------------------------------------------
// include
// -----------------------------------------------------------------------------
#include <stdio.h>

// -----------------------------------------------------------------------------
// define
// -----------------------------------------------------------------------------
#define MAX_ID ( (unsigned int) 100000 )	// ユーザIDの最大値

// -----------------------------------------------------------------------------
// プロトタイプ宣言
// -----------------------------------------------------------------------------
unsigned int groupIdList[MAX_ID] = { 0 };	// 友達関係を示すグループIDのリスト

// -----------------------------------------------------------------------------
// 概要		：プログラムのmain関数
// 引数		：無し
// 戻り値	：0 (制約違反の入力は考慮していない)
// -----------------------------------------------------------------------------
int main( void )
{
	unsigned int numUser = 0;		// ユーザ数
	unsigned int numFriend = 0;		// 友達関係数
	unsigned int numQuestion = 0;	// 質問数
	int firstUserId= 0;				// ユーザID1
	int secondUserId = 0;			// ユーザID2
	unsigned int i;
	unsigned int j;

	// グループIDリストの初期化
	initGroupIdList();

	scanf( "%d %d\n", &numUser, &numFriend );

	for( i = 0; i < numFriend; i++ )
	{
		// 友達関係を取得
		scanf( "%d %d\n", &firstUserId, &secondUserId );

		// 同じグループIDを付与
		assignGroupId( firstUserId, secondUserId );
	}

	scanf( "%d\n", &numQuestion );

	for( j = 0; j < numQuestion; j++ )
	{
		// 質問を取得
		scanf( "%d %d\n", &firstUserId, &secondUserId );

		// ユーザのグループIDを比較
		if ( isSameGroupId( firstUserId, secondUserId ) == 0 )
		{
			printf( "yes\n" );
		}
		else
		{
			printf( "no\n" );
		}
	}

	return 0;
}

// -----------------------------------------------------------------------------
// 概要		：グループIDリストを初期化する
// 引数		：無し
// 戻り値	：無し
// -----------------------------------------------------------------------------
void initGroupIdList( void )
{
	unsigned int i;

	for( i = 0; i < MAX_ID; i++ )
	{
		// 初期値は配列要素のindexを入れておく
		groupIdList[i] = i;
	}
}

// -----------------------------------------------------------------------------
// 概要		：ユーザにグループIDを割り当てる
//            友達関係を示す入力が与えられた直後に呼ぶこと
// 引数		：グループIDを与えるユーザの ユーザID
// 戻り値	：無し
// -----------------------------------------------------------------------------
void assignGroupId( int firstUserId, int secondUserId )
{
	int firstGroupId = 0;
	int secondGroupId = 0;

	// ユーザのグループIDを取得
	firstGroupId = findGroupId( firstUserId );
	secondGroupId = findGroupId( secondUserId );

	if( firstGroupId != secondGroupId )
	{
		// 同じグループIDを割り当てる
		groupIdList[secondGroupId] = firstGroupId;
	}
}

// -----------------------------------------------------------------------------
// 概要		：ユーザが所属するグループIDを返す
// 引数		：グループIDを知りたいユーザの ユーザID
// 戻り値	：グループID
// -----------------------------------------------------------------------------
int findGroupId( int userId )
{
	if( userId == groupIdList[userId] )
	{
		// グループID割当て済み or 1回目のグループID割当て
		return userId;
	}
	else
	{
		// 新たなグループIDを付与
		return groupIdList[userId] = findGroupId( groupIdList[userId] );
	}
}

// -----------------------------------------------------------------------------
// 概要		：ユーザのグループIDが同じか比較する
// 引数		：グループIDを比較するユーザの ユーザID
// 戻り値	：グループIDが同じなら0、異なるなら-1
// -----------------------------------------------------------------------------
int isSameGroupId( int firstUserId, int secondUserId )
{
	return ( findGroupId( firstUserId ) == findGroupId( secondUserId ) ) ? 0 : -1;
}



Measured memory_bytes: 2116