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

#include <cstdio>
#include <cstring>
#include <set>
//#include <conio.h>
using namespace std;
//FILE *fin = fopen("p2.in", "r");

#define MAXN	1020

set<int> s[MAXN][2];
char A[MAXN][MAXN];
int q, n, m, comp = 0;
char used[MAXN];

void dfs(int i, bool frnd)
{
	int j, k;
    used[i] = 1;

    if (frnd) s[comp][0].insert(i);
    else s[comp][1].insert(i);

    for (j = 0; j < n; ++j) {
    	if (!used[j] && A[i][j]) {
        	if (frnd) {
            	if (A[i][j]==1) dfs(j, true);
                else dfs(j, false);
            }
            else {
            	if (A[i][j]==1) dfs(j, false);
                else dfs(j, true);
            }
        }
    }
}

void solve()
{
	int i;
    for (i = 0; i < n; ++i) used[i] = 0;
    for (i = 0; i < n; ++i) {
    	if (!used[i]) {
            dfs(i, true);
            ++comp;
        }
    }

    //printf("copm = %d\n", comp);
    //printf("size = %d\n", s[comp]);
    //set<int>::iterator it;
    //for (it = s[0][0].begin(); it!=s[0][0].end(); it++)    printf("%d, ", *it);
}

void getPlace(int a, int& x, int& y)
{
	int i;
    for (i = 0; i < comp; ++i) {
        if (s[i][0].find(a) != s[i][0].end()) {
        	x = i; y = 0; return;
        }
        if (s[i][1].find(a) != s[i][1].end()) {
        	x = i; y = 1; return;
        }
    }
}

void readf()
{
	int i, j, a, b, r;
    int x1, y1, x2, y2;
    
    scanf("%d%d", &n, &m);
    for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) A[i][j] = 0;
    for (i = 0; i < m; ++i) {
    	scanf("%d%d%d", &a, &b, &r);
        ++r;
        A[a][b] = r;
        A[b][a] = r;
	}

    solve();

    scanf("%d", &q);
    for (i = 0; i < q; ++i) {
    	scanf("%d%d", &a, &b);
        getPlace(a, x1, y1);
        getPlace(b, x2, y2);
        if (x1 != x2) printf("2\n");
        else {
        	if (y1 != y2) printf("1\n");
            else printf("0\n");
        }
    }
}

int main()
{
	readf();
    
    //getch();
    return 0;
}
