#include<bits/stdc++.h>
#define ll long long
#define pp push_back
#define endl '\n'
#define all(x) x.begin(),x.end()
#define ld long double
#define PI acos(-1)
#define ones(x) __builtin_popcountll(x)
//#define int ll
using namespace std;
void Drakon() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
unsigned long long inf = 1e10;
const double EPS = 1e-6;
const int MOD = 1000000007, N = 1e6 + 5, LOG = 22;
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll x, ll y) {
ll ret = 1;
while (y > 0) {
if (y % 2 == 0) {
x = mul(x, x);
y = y / 2;
} else {
ret = mul(ret, x);
y = y - 1;
}
}
return ret;
}
vector<pair<int, int>> adj[N];
int depth[N], up[N][LOG], dist[N][LOG], n;
struct DSU {
vector<int> par, sz;
DSU(int n) : par(n), sz(n, 1) { iota(par.begin(), par.end(), 0); }
int find(int x) {
if (x == par[x])return x;
return par[x] = find(par[x]);
}
bool same(int x, int y) { return find(x) == find(y); }
bool join(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return false;
if (sz[x] < sz[y])
swap(x, y);
sz[x] += sz[y];
par[y] = x;
return true;
}
int size(int x) { return sz[find(x)]; }
};
bool vis[N];
void dfs(int u, int p) {
vis[u] = true;
for (auto v: adj[u]) {
if (v.first == p)continue;
depth[v.first] = depth[u] + 1;
dist[v.first][0] = v.second;
up[v.first][0] = u;
dfs(v.first, u);
}
}
int get_lca(int a, int b) {
if (depth[a] < depth[b])
swap(a, b);
int k = depth[a] - depth[b];
for (int i = 0; i < LOG; ++i) {
if ((1 << i) & k) {
a = up[a][i];
}
}
if (a == b)
return a;
for (int i = LOG - 1; i >= 0; --i) {
if (up[a][i] != up[b][i]) {
a = up[a][i];
b = up[b][i];
}
}
return up[a][0];
}
void build() {
for (int i = 0; i < n; ++i) {
if(vis[i]) continue;
up[i][0] = i;
dist[i][0] = 1e9;
depth[i] = 0;
dfs(i, i);
}
for (int j = 1; j < LOG; ++j) {
for (int i = 0; i < n; ++i) {
up[i][j] = up[up[i][j - 1]][j - 1];
dist[i][j] = min(dist[i][j - 1], dist[up[i][j - 1]][j - 1]);
}
}
}
int kthancestor(int u, int k) {
int ret = 1e9;
for (int i = 0; i < LOG; ++i) {
if ((1 << i) & k) {
ret = min(ret, dist[u][i]);
u = up[u][i];
}
}
return ret;
}
struct edge {
int u, v, w;
};
void solve() {
int m;
cin >> n >> m;
vector<edge> e;
for (int i = 0; i < m; ++i) {
int u, v, w;
cin >> u >> v >> w;
u--, v--;
e.push_back({u, v, w});
}
sort(all(e), [&](edge &a, edge &b) {
return a.w > b.w;
});
DSU dsu(n);
for (int i = 0; i < m; ++i) {
if(dsu.find(e[i].u) != dsu.find(e[i].v)) {
adj[e[i].u].emplace_back(e[i].v, e[i].w);
adj[e[i].v].emplace_back(e[i].u, e[i].w);
dsu.join(e[i].u, e[i].v);
}
}
build();
int q;
cin >> q;
while (q --) {
int u, v;
cin >> u >> v;
u--, v--;
if(!dsu.same(u, v)) {
cout << 0 << endl;
continue;
}
int lc = get_lca(u, v);
cout << min(kthancestor(u, depth[u] - depth[lc]),
kthancestor(v, depth[v] - depth[lc])) << endl;
}
}
signed main() {
Drakon();
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIG9uZXMoeCkgX19idWlsdGluX3BvcGNvdW50bGwoeCkKLy8jZGVmaW5lIGludCBsbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgRHJha29uKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgp1bnNpZ25lZCBsb25nIGxvbmcgaW5mID0gMWUxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTY7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBOID0gMWU2ICsgNSwgTE9HID0gMjI7CgpsbCBtdWwoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgJSBNT0QgKyBNT0QpICogKGIgJSBNT0QgKyBNT0QpICUgTU9EOwp9CgpsbCBhZGQoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgKyBiICsgMiAqIE1PRCkgJSBNT0Q7Cn0KCmxsIHB3KGxsIHgsIGxsIHkpIHsKICAgIGxsIHJldCA9IDE7CiAgICB3aGlsZSAoeSA+IDApIHsKICAgICAgICBpZiAoeSAlIDIgPT0gMCkgewogICAgICAgICAgICB4ID0gbXVsKHgsIHgpOwogICAgICAgICAgICB5ID0geSAvIDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0ID0gbXVsKHJldCwgeCk7CiAgICAgICAgICAgIHkgPSB5IC0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0Owp9Cgp2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGFkaltOXTsKaW50IGRlcHRoW05dLCB1cFtOXVtMT0ddLCBkaXN0W05dW0xPR10sIG47CgpzdHJ1Y3QgRFNVIHsKICAgIHZlY3RvcjxpbnQ+IHBhciwgc3o7CgogICAgRFNVKGludCBuKSA6IHBhcihuKSwgc3oobiwgMSkgeyBpb3RhKHBhci5iZWdpbigpLCBwYXIuZW5kKCksIDApOyB9CgogICAgaW50IGZpbmQoaW50IHgpIHsKICAgICAgICBpZiAoeCA9PSBwYXJbeF0pcmV0dXJuIHg7CiAgICAgICAgcmV0dXJuIHBhclt4XSA9IGZpbmQocGFyW3hdKTsKICAgIH0KCiAgICBib29sIHNhbWUoaW50IHgsIGludCB5KSB7IHJldHVybiBmaW5kKHgpID09IGZpbmQoeSk7IH0KCiAgICBib29sIGpvaW4oaW50IHgsIGludCB5KSB7CiAgICAgICAgeCA9IGZpbmQoeCk7CiAgICAgICAgeSA9IGZpbmQoeSk7CiAgICAgICAgaWYgKHggPT0geSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChzelt4XSA8IHN6W3ldKQogICAgICAgICAgICBzd2FwKHgsIHkpOwogICAgICAgIHN6W3hdICs9IHN6W3ldOwogICAgICAgIHBhclt5XSA9IHg7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaW50IHNpemUoaW50IHgpIHsgcmV0dXJuIHN6W2ZpbmQoeCldOyB9Cn07Cgpib29sIHZpc1tOXTsKdm9pZCBkZnMoaW50IHUsIGludCBwKSB7CiAgICB2aXNbdV0gPSB0cnVlOwogICAgZm9yIChhdXRvIHY6IGFkalt1XSkgewogICAgICAgIGlmICh2LmZpcnN0ID09IHApY29udGludWU7CiAgICAgICAgZGVwdGhbdi5maXJzdF0gPSBkZXB0aFt1XSArIDE7CiAgICAgICAgZGlzdFt2LmZpcnN0XVswXSA9IHYuc2Vjb25kOwogICAgICAgIHVwW3YuZmlyc3RdWzBdID0gdTsKICAgICAgICBkZnModi5maXJzdCwgdSk7CiAgICB9Cn0KCmludCBnZXRfbGNhKGludCBhLCBpbnQgYikgewogICAgaWYgKGRlcHRoW2FdIDwgZGVwdGhbYl0pCiAgICAgICAgc3dhcChhLCBiKTsKICAgIGludCBrID0gZGVwdGhbYV0gLSBkZXB0aFtiXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTE9HOyArK2kpIHsKICAgICAgICBpZiAoKDEgPDwgaSkgJiBrKSB7CiAgICAgICAgICAgIGEgPSB1cFthXVtpXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoYSA9PSBiKQogICAgICAgIHJldHVybiBhOwogICAgZm9yIChpbnQgaSA9IExPRyAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgaWYgKHVwW2FdW2ldICE9IHVwW2JdW2ldKSB7CiAgICAgICAgICAgIGEgPSB1cFthXVtpXTsKICAgICAgICAgICAgYiA9IHVwW2JdW2ldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB1cFthXVswXTsKfQoKdm9pZCBidWlsZCgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgaWYodmlzW2ldKSBjb250aW51ZTsKICAgICAgICB1cFtpXVswXSA9IGk7CiAgICAgICAgZGlzdFtpXVswXSA9IDFlOTsKICAgICAgICBkZXB0aFtpXSA9IDA7CiAgICAgICAgZGZzKGksIGkpOwogICAgfQogICAgZm9yIChpbnQgaiA9IDE7IGogPCBMT0c7ICsraikgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIHVwW2ldW2pdID0gdXBbdXBbaV1baiAtIDFdXVtqIC0gMV07CiAgICAgICAgICAgIGRpc3RbaV1bal0gPSBtaW4oZGlzdFtpXVtqIC0gMV0sIGRpc3RbdXBbaV1baiAtIDFdXVtqIC0gMV0pOwogICAgICAgIH0KICAgIH0KfQoKaW50IGt0aGFuY2VzdG9yKGludCB1LCBpbnQgaykgewogICAgaW50IHJldCA9IDFlOTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTE9HOyArK2kpIHsKICAgICAgICBpZiAoKDEgPDwgaSkgJiBrKSB7CiAgICAgICAgICAgIHJldCA9IG1pbihyZXQsIGRpc3RbdV1baV0pOwogICAgICAgICAgICB1ID0gdXBbdV1baV07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldDsKfQoKc3RydWN0IGVkZ2UgewogICAgaW50IHUsIHYsIHc7Cn07Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG07CiAgICBjaW4gPj4gbiA+PiBtOwogICAgdmVjdG9yPGVkZ2U+IGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICB1LS0sIHYtLTsKICAgICAgICBlLnB1c2hfYmFjayh7dSwgdiwgd30pOwogICAgfQoKICAgIHNvcnQoYWxsKGUpLCBbJl0oZWRnZSAmYSwgZWRnZSAmYikgewogICAgICAgIHJldHVybiBhLncgPiBiLnc7CiAgICB9KTsKCiAgICBEU1UgZHN1KG4pOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgICAgaWYoZHN1LmZpbmQoZVtpXS51KSAhPSBkc3UuZmluZChlW2ldLnYpKSB7CiAgICAgICAgICAgIGFkaltlW2ldLnVdLmVtcGxhY2VfYmFjayhlW2ldLnYsIGVbaV0udyk7CiAgICAgICAgICAgIGFkaltlW2ldLnZdLmVtcGxhY2VfYmFjayhlW2ldLnUsIGVbaV0udyk7CiAgICAgICAgICAgIGRzdS5qb2luKGVbaV0udSwgZVtpXS52KTsKICAgICAgICB9CiAgICB9CgogICAgYnVpbGQoKTsKCiAgICBpbnQgcTsKICAgIGNpbiA+PiBxOwogICAgd2hpbGUgKHEgLS0pIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIHUtLSwgdi0tOwogICAgICAgIGlmKCFkc3Uuc2FtZSh1LCB2KSkgewogICAgICAgICAgICBjb3V0IDw8IDAgPDwgZW5kbDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGludCBsYyA9IGdldF9sY2EodSwgdik7CiAgICAgICAgY291dCA8PCBtaW4oa3RoYW5jZXN0b3IodSwgZGVwdGhbdV0gLSBkZXB0aFtsY10pLAogICAgICAgICAgICAgICAgICAgIGt0aGFuY2VzdG9yKHYsIGRlcHRoW3ZdIC0gZGVwdGhbbGNdKSkgPDwgZW5kbDsKICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CiAgICBEcmFrb24oKTsKICAgIGludCB0ID0gMTsKICAgIC8vY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==