#include<iostream>
#include<algorithm>
using namespace std;
const int maxh=20,inf=29999999;
struct edge
{
int v,nxt,dis,u;
}a[100005],b[100005];
int cmp(edge a,edge b)
{
return a.dis>b.dis;
}
int f[100005],cnt,head[100005],n,m,q,vis[100005],deep[100005],w[10005][10005],fa[10005][10005];
int findf(int x)
{
if(f[x]!=x)f[x]=findf(f[x]);
return f[x];
}
void addedge(int u,int v,int dis)
{
a[++cnt].dis=dis;
a[cnt].v=v;
a[cnt].nxt=head[u];
head[u]=cnt;
}
void kkk()
{
sort(b+1,b+1+m,cmp);
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=m;i++)
{
if(findf(b[i].u)!=findf(b[i].v))
{
f[findf(b[i].u)]=findf(b[i].v);
addedge(b[i].u,b[i].v,b[i].dis);
addedge(b[i].v,b[i].u,b[i].dis);
}
}
}
void dfs(int now,int depth)
{
vis[now]=1;
for(int i=head[now];i;i=a[i].nxt)
{
int to=a[i].v;
if(!vis[to])
{
deep[now]=depth;
fa[to][0]=now;
w[to][0]=a[i].dis;
dfs(to,depth+1);
}
}
}
void init()
{
for(int j=1;j<=maxh;j++)
for(int i=1;i<=n;i++)
{
fa[i][j-1]=fa[fa[i][j-1]][j-1];
w[i][j-1]=min(w[i][j-1],w[fa[i][j-1]][j-1]);
}
}
int lca(int x,int y)
{
if(findf(x)!=findf(y))return -1;
if(deep[x]<deep[y])swap(x,y);
int ans=inf;
int de=deep[x]-deep[y];
for(int j=maxh;j>=0;j--)
if((1<<j)&de)
{
ans=min(ans,w[x][j]);
x=fa[x][0];
}
if(x==y)return ans;
for(int j=maxh;j>=0;j--)
if(fa[x][j]!=fa[y][j])
{
ans=min(ans,min(w[x][j],w[y][j]));
x=fa[x][j];
y=fa[y][j];
}
ans=min(ans,min(w[x][0],w[y][0]));
return ans;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>b[i].u>>b[i].v>>b[i].dis;
kkk();
for(int i=1;i<=n;i++)
if(!vis[i])
{
deep[i]=1;
dfs(i,1);
fa[i][0]=i;
w[i][0]=inf;
}
init();
cin>>q;
for(int i=1;i<=q;i++)
{
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
return 0;
}
插一句题外话,你谷的评测姬究竟怎么了,在评测结果中,时常出现UKE这种在平时对我来说只是略有耳闻的特殊情况。。。