← Home
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const long long oo=1e18;
const int mod=1e9+7;
const int base=31;
const int B=320;
int Test=1;
void home()
{
    if(fopen("main.inp","r")) 
    freopen("main.inp","r",stdin),
    freopen("main.out","w",stdout);
}
bool bit(int mask,int i){return (mask>>i)&1;}
int n,m,q;
vector<pair<int,int>>e[100005];
map<pair<int,int>,int>mp;
pair<int,int>Q[100005];
vector<int>roll;
int bo[100005],sz[100005],ans[100005];
int Tim(int a)
{
    if(a==bo[a])return a;
    return bo[a]=Tim(bo[a]);
}
vector<int>comp[100005];
void Hop(int u,int v,int type)
{
    u=Tim(u),v=Tim(v);
    if(u==v)return;
    roll.push_back(u);
    roll.push_back(v);
    if(sz[u]<sz[v])swap(u,v);
    if(type)
    {
        for(int uu:comp[u])
        {
            for(int vv:comp[v])
            {
                if(uu<vv)mp[{uu,vv}]++;
                else mp[{vv,uu}]++;
            }
        }
        for(int vv:comp[v])comp[u].push_back(vv);
        comp[v].clear();
    }
    bo[v]=u;sz[u]+=sz[v];
}
void Tcmduc_VOI27()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v,c;cin>>u>>v>>c;
        e[c].push_back({u,v});
    }
    cin>>q;
    for(int i=1;i<=q;i++)
    {
        cin>>Q[i].fi>>Q[i].se;
        if(Q[i].fi>Q[i].se)swap(Q[i].fi,Q[i].se);
    }
    for(int i=1;i<=n;i++)bo[i]=i,sz[i]=1,comp[i].push_back(i);
    for(int c=1;c<=m;c++)
    {
        for(auto [u,v]:e[c])
        {
            if(e[c].size()>B)Hop(u,v,0);
            else Hop(u,v,1);
        }
        if(e[c].size()>B)
        {
            for(int i=1;i<=q;i++)
                if(Tim(Q[i].fi)==Tim(Q[i].se))ans[i]++;
        }
        for(int u:roll)
        {
            bo[u]=u,sz[u]=1,comp[u].clear();
            comp[u].push_back(u);
        }
        roll.clear();
    }
    for(int i=1;i<=q;i++)cout<<ans[i]+mp[{Q[i].fi,Q[i].se}]<<'\n';
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);home();
    while(Test--)Tcmduc_VOI27();
    return 0;
}