#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int>>> grafo;
bool isConected(int A, int B, int cor) {
  queue<int> fila;
  fila.push(A);
  map<int, int> mapa;
  mapa[A] = 1;
  while (!fila.empty()) {
    int saida = fila.front();
    fila.pop();
    for (int j = 0; j < grafo[saida].size(); j++) {
      int destino = grafo[saida][j].first;
      int tipo = grafo[saida][j].second;
      if (mapa[destino] == 0 && tipo == cor) {
        mapa[destino] = 1;
        if (destino == B) return true;
        fila.push(destino);
      }
    }
  }
  return false;
}
int main() {
  int a, b;
  cin >> a >> b;
  grafo.clear();
  set<int> cores;
  grafo.resize(a + 1);
  for (int i = 0; i <= a; i++) {
    grafo[i].clear();
  }
  for (int i = 0; i < b; i++) {
    int inicio, fim, cor;
    cin >> inicio >> fim >> cor;
    cores.insert(cor);
    grafo[inicio].push_back(make_pair(fim, cor));
    grafo[fim].push_back(make_pair(inicio, cor));
  }
  int testes;
  cin >> testes;
  for (int i = 0; i < testes; i++) {
    int inicio, fim;
    int resp = 0;
    cin >> inicio >> fim;
    for (auto x : cores) {
      if (isConected(inicio, fim, x)) {
        resp++;
      }
    }
    cout << resp << endl;
  }
  return 0;
}
