#include<bits/stdc++.h>
using namespace std;
struct x
{
int x,y,z;
}g[500005];
int n,m,p,a[500005],f[500005][40],f1[500005][40],dep[500005],k[500005];
int sum,ans,father[500005],x2,y2;
vector<int>b[500005],c[500005];
long long find(long long x)
{
if(father[x]!=x)father[x]=find(father[x]);
return father[x];
}
void dfs(int u,int fa)
{
// cout<<u<<" "<<fa<<" "<<f1[u][0]<<"\n";
dep[u]=dep[fa]+1;
f[u][0]=fa;
for(int i=0;(1<<i)<=dep[u];i++)
f[u][i+1]=f[f[u][i]][i],f1[u][i+1]=min(f1[f[u][i]][i],f1[u][i]);
for(int i=0;i<b[u].size();i++)
{
int v=b[u][i];
if(v==fa)continue;
f1[v][0]=c[u][i];
dfs(v,u);
}
}
int LCA(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
//cout<<x<<" "<<y<<" ";
int sum1=1e9;
for(int i=35;i>=0;i--)
{
if(dep[f[x][i]]>=dep[y])
{
sum1=min(sum1,f1[x][i]);
x=f[x][i];
}
}
//cout<<x<<" "<<y<<"\n";
if(x==y)return sum1;
for(int i=35;i>=0;i--)
{
if(f[x][i]!=f[y][i]&&f[x][i]!=0&&f[y][i]!=0)
{
sum1=min(sum1,f1[x][i]);
sum1=min(sum1,f1[y][i]);
x=f[x][i];
y=f[y][i];
}
}
sum1=min(sum1,f1[x][0]);
sum1=min(sum1,f1[y][0]);
return sum1;
}
int cmp(x a,x b)
{
return a.z>b.z;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
father[i]=i;
memset(f1,127,sizeof(f1));
for(int i=0;i<m;i++)
scanf("%d%d%d",&g[i].x,&g[i].y,&g[i].z);
sort(g,g+m,cmp);
for(int i=0;i<m;i++)
{
if(find(g[i].x)!=find(g[i].y))
{
father[find(g[i].x)]=find(g[i].y);
b[g[i].x].push_back(g[i].y);
b[g[i].y].push_back(g[i].x);
c[g[i].x].push_back(g[i].z);
c[g[i].y].push_back(g[i].z);
}
}
dep[0]=-1;dfs(1,0);
cin>>m;
for(int i=0;i<m;i++)
{
cin>>x2>>y2;
int l=LCA(x2,y2);
if(l==1e9)cout<<-1<<"\n";
else cout<<l<<"\n";
}
return 0;
}