#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
const int maxn=1e4;
const ll inf=1e8;
int t;
int n,m,w;
int f[maxn+5][20];
int head[maxn+5];
int fa[maxn+5];
int dp[maxn+5][20];
struct node{
int from,to,w;
bool operator<(node a)const{
return w>a.w;
}
}e2[5*maxn+5];
struct edge{
int to,w,next;
}e[10*maxn+5];
int tot=0;
int dep[maxn+5];
void add(int x,int y,int w)
{
e[tot].to=y,e[tot].w=w,e[tot].next=head[x],head[x]=tot++;
e[tot].to=x,e[tot].w=w,e[tot].next=head[y],head[y]=tot++;
}
int find(int x)
{
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
bool judge(int x,int y)
{
return find(x)==find(y);
}
void merge(int x,int y)
{
x=find(x),y=find(y);
fa[x]=y;
}
void kruscal()
{
sort(e2+1,e2+1+m);
for(int i=1;i<=m;i++)
{
int u=e2[i].from;
int v=e2[i].to;
if(judge(u,v)) continue;
add(u,v,e2[i].w);
merge(u,v);
}
}
void dfs(int x,int father,int w)
{
dep[x]=dep[father]+1;
f[x][0]=father;
dp[x][0]=w;
for(int i=1;i<=19;i++)
{
if(f[x][i-1]==0) break;
f[x][i]=f[f[x][i-1]][i-1];
dp[x][i]=min(dp[x][i-1],dp[f[x][i-1]][i-1]);
}
for(int i=head[x];i!=-1;i=e[i].next)
{
int v=e[i].to;
// printf("%d %d %d\n",x,v,i);
if(v==father) continue;
dfs(v,x,e[i].w);
}
}
int lca(int u,int v)
{
int ans=inf;
if(dep[u]<dep[v]) swap(u,v);
for(int i=19;i>=0;i--)
{
if(dep[f[u][i]]>=dep[v])
{
ans=min(ans,dp[u][i]);
u=f[u][i];
}
}
if(u==v) return ans;
for(int i=19;i>=0;i--)
{
if(f[u][i]!=f[v][i])
{
ans=min(ans,dp[u][i]);
ans=min(ans,dp[v][i]);
u=f[u][i];
v=f[v][i];
}
}
// printf("%d %d\n",u,v);
ans=min(ans,dp[u][0]);
ans=min(ans,dp[v][0]);
return ans;
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e2[i].from,&e2[i].to,&e2[i].w);
}
kruscal();
dep[0]=0;
for(int i=1;i<=n;i++)
if(fa[i]==i)
dfs(i,0,0);
int x,y,q;
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
scanf("%d%d",&x,&y);
if(!judge(x,y)) printf("-1\n");
else
printf("%d\n",lca(x,y));
}
return 0;
}