10 pts+WA
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
const int N=5e4+5,lg=21;
int n,m,q;
int f[N];
int fa[N][lg],w[N][lg],d[N];
bool vis[N];
struct nd {int u,v,w;}k[N];
vector<pair<int,int> >g[N];
int find(int v) {return (f[v]==v?v:f[v]=find(f[v]));}
inline int min(int a,int b,int c) {return (a<b?a:(b<c?b:c));}
void dfs(int v,int ft,int val) {
d[v]=d[ft]+1,fa[v][0]=ft,w[v][0]=val;
vis[v]=1;
for(auto i:g[v])
if(!vis[i.x]) dfs(i.x,v,i.y);
}
signed main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i) f[i]=i;
for(int i=1;i<=m;++i) cin>>k[i].u>>k[i].v>>k[i].w;
sort(k+1,k+m+1,[](nd a,nd b){return a.w>b.w;});
for(int i=1;i<=m;++i)
if(find(k[i].u)!=find(k[i].v))
f[find(k[i].u)]=find(k[i].v),
g[k[i].u].push_back(make_pair(k[i].v,k[i].w)),
g[k[i].v].push_back(make_pair(k[i].u,k[i].w));
for(int i=1;i<=n;++i)
if(!vis[i]) dfs(i,0,1e9);
for(int j=1;j<lg;++j)
for(int i=1;i<=n;++i)
fa[i][j]=fa[fa[i][j-1]][j-1],
w[i][j]=min(w[i][j-1],w[fa[i][j-1]][j-1]);
cin>>q;
while(q--) {
int u,v;
cin>>u>>v;
if(find(u)!=find(v)) {puts("-1");continue;}
int ans=1e9;
if(d[u]<d[v]) swap(u,v);
for(int i=lg-1;i>=0;--i)
if(d[fa[u][i]]>d[v])
ans=min(ans,w[u][i]),
u=fa[u][i];
for(int i=lg-1;i>=0;--i)
if(fa[u][i]!=fa[v][i])
ans=min(ans,w[u][i],w[v][i]),
u=fa[u][i],v=fa[v][i];
ans=min(ans,w[u][0],w[v][0]);
cout<<ans<<endl;
}
return 0;
}