#include<bits/stdc++.h>
using namespace std;
struct ED{int ex,ey,sum;}ed[50005];
bool cmp(ED a,ED b){return a.sum>b.sum;}
int f[10005],tong[10005];int getfa(int x){if(f[x]!=x)f[x]=getfa(f[x]);return f[x];}
int head[10005],cnt;
struct EDGE{int to,nxt,num;}edge[20005];
void Add(int x,int y,int z){edge[++cnt].to=y;edge[cnt].nxt=head[x];edge[cnt].num=z;head[x]=cnt;}
EDGE qed[20005];
int qh[10005],qnt,res[10005];
void Qdd(int x,int y,int z){qed[++qnt].to=y;qed[qnt].nxt=qh[x];qed[qnt].num=z;qh[x]=qnt;}
int tmin[10005],siz[10005];
void getsiz(int x,int fa)
{
siz[x]=1;tmin[x]=1e9;
for(int i=head[x];i;i=edge[i].nxt)
if(edge[i].to!=fa)getsiz(edge[i].to,x),siz[x]+=siz[edge[i].to];
}
int RT;
void getrt(int x,int fa,int alsiz)
{
int Max=-1;
for(int i=head[x];i;i=edge[i].nxt)
if(edge[i].to!=fa)getrt(edge[i].to,x,alsiz),Max=max(Max,siz[edge[i].to]);
Max=max(Max,alsiz-siz[x]);
if(Max<=alsiz/2)RT=x;
}
void dfs(int x,int fa,int no,int k,bool flag)
{
if(flag)
for(int i=qh[x];i;i=qed[i].nxt)
if(tmin[qed[i].to]!=1e9)res[qed[i].num]=min(res[qed[i].num],min(k,tmin[qed[i].to]));
if(!flag)tmin[x]=k;
for(int i=head[x];i;i=edge[i].nxt)
if(edge[i].to!=fa&&edge[i].to!=no)dfs(edge[i].to,x,no,min(k,edge[i].num),flag);
}
void over(int x,int fa)
{
getsiz(x,fa);
if(siz[x]==1)return;
getrt(x,fa,siz[x]);
int rt=RT;
tmin[rt]--;
for(int i=head[rt];i;i=edge[i].nxt)
if(edge[i].to!=fa){dfs(edge[i].to,rt,fa,edge[i].num,1),dfs(edge[i].to,rt,fa,edge[i].num,0);}
for(int i=head[rt];i;i=edge[i].nxt)
if(edge[i].to!=fa)over(edge[i].to,rt);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)scanf("%d%d%d",&ed[i].ex,&ed[i].ey,&ed[i].sum);
sort(ed+1,ed+m+1,cmp);
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++)
if(getfa(ed[i].ex)!=getfa(ed[i].ey))f[f[ed[i].ey]]=f[ed[i].ex],Add(ed[i].ex,ed[i].ey,ed[i].sum),Add(ed[i].ey,ed[i].ex,ed[i].sum);
int qn;scanf("%d",&qn);
for(int i=1;i<=qn;i++){res[i]=1e9;int a,b;scanf("%d%d",&a,&b);if(getfa(a)!=getfa(b)){res[i]=-1;continue;}Qdd(a,b,i);Qdd(b,a,i);}
for(int i=1;i<=n;i++)tong[getfa(i)]++;
for(int i=1;i<=n;i++)if(tong[f[i]])over(i,0),tong[f[i]]=0;
for(int i=1;i<=qn;i++)cout<<res[i]<<endl;
getchar();getchar();
}