/*
LANG:C++
TASK:Y1984
*/

#include <iostream.h>
#include  <vector>
using namespace std;

struct A{
	int v;
	int p;
};

vector <int> nation1;
vector <int> nation2;
vector <int> nation3;
vector <int> other;
vector <int> other2;
vector <int> other3;
vector < vector <A> > matrix;
int N,M;


int used[1024];

void dfs(int vertex)
{
	int i;
		used[vertex]=1;
		nation1.push_back(vertex);
		int iter;

		if(!other.empty()){
		for(i=0;i<other.size();i++)
				if(other[i]==vertex)
				iter=i;

				other.erase(other.begin()+iter);}

			
			for(i=0;i<matrix[vertex].size();i++)
	{	
		if(!used[matrix[vertex][i].v]&&matrix[vertex][i].p==0)
			dfs(matrix[vertex][i].v);
		
	}
}



void dfs1(int vertex)
{
	int i;
		used[vertex]=1;
	int iter;
	if(!other2.empty())
	{
	for(i=0;i<other2.size();i++)
			if(other2[i]==vertex)
			{
				iter=i;
			}

			other2.erase(other2.begin()+iter);}


		nation2.push_back(vertex);
	for(i=0;i<matrix[vertex].size();i++)
	{	
		if(!used[matrix[vertex][i].v]&&matrix[vertex][i].p==0)
			dfs1(matrix[vertex][i].v);
		
	}
}





void dfs2(int vertex)
{
	int i;
		used[vertex]=1;
		nation3.push_back(vertex);
		int iter;

		if(!other3.empty()){
		for(i=0;i<other3.size();i++)
				if(other3[i]==vertex)
				iter=i;

				other3.erase(other3.begin()+iter);}

			
			for(i=0;i<matrix[vertex].size();i++)
	{	
		if(!used[matrix[vertex][i].v]&&matrix[vertex][i].p==0)
			dfs2(matrix[vertex][i].v);
		
	}
}








int main()
{
cin>>N>>M;

int i,a,b,c;





for(i=1;i<=N+1;i++)
{vector <A> help;
	matrix.push_back(help);
}

int s=-1;

for(i=1;i<=M;i++)
{
	cin>>a>>b>>c;
	A temp;
	temp.v=b;
	temp.p=c;
	if(c==0&&s==-1)
	s=a;		
	matrix[a].push_back(temp);

	temp.v=a;

	matrix[b].push_back(temp);

}


for(i=0;i<N;i++)
	other.push_back(i);

dfs(s);
int j;
int status=0;
for(i=0;i<other.size();i++)
other2.push_back(other[i]);







for(i=0;i<other.size();i++)
{
	for(j=0;j<matrix[other[i]].size();j++)
		if(matrix[other[i]][j].p==0)
		{status=1;
			dfs1(other[i]);
		break;
		}
if(status==1) break;
}

for(i=0;i<other2.size();i++)
other3.push_back(other2[i]);

status=0;
for(i=0;i<other2.size();i++)
{
	for(j=0;j<matrix[other2[i]].size();j++)
		if(matrix[other2[i]][j].p==0)
		{status=1;
			dfs2(other2[i]);
		break;
		}
if(status==1) break;
}



/*if(!nation1.empty()){
for(i=0;i<nation1.size();i++)
	cout<<nation1[i]<<" ";
}
cout<<endl;



if(!nation2.empty()){
for(i=0;i<nation2.size();i++)
	cout<<nation2[i]<<" ";
cout<<endl;}


if(!nation3.empty()){
for(i=0;i<nation3.size();i++)
	cout<<nation3[i]<<" ";
cout<<endl;}
*/


vector <int> solve;



int Q;
cin>>Q;
solve.resize(Q+1);
int x,y;
int xs,ys,r;
for(i=1;i<=Q;i++)
{
cin>>x>>y;
xs=0;
ys=0;
r=0;

if(!nation1.empty())
{
	for(j=0;j<nation1.size();j++)
	{if(nation1[j]==x)
			xs=1;
		if(nation1[j]==y)
			ys=1;
	}

}


if(!nation2.empty())
{
	for(j=0;j<nation2.size();j++)
	{if(nation2[j]==x)
			xs=2;
		if(nation2[j]==y)
			ys=2;
	}

}



if(!nation3.empty())
{
	for(j=0;j<nation3.size();j++)
	{if(nation3[j]==x)
			xs=3;
		if(nation3[j]==y)
			ys=3;
	}

}



if(!other3.empty())
{
	for(j=0;j<other3.size();j++)
	{if(other3[j]==x)
			xs=4;
		if(other3[j]==y)
			ys=4;
	}

}

if(xs==4||ys==4&&(nation1.empty()||nation2.empty()||nation3.empty())) solve[i]=0;
else solve[i]=2;
if(xs==ys&&xs!=4) solve[i]=0;
if(xs!=ys&&xs!=4&&ys!=4) solve[i]=1;

}


for(i=1;i<=Q;i++)
cout<<solve[i]<<endl;

return 0;
}




