#include "stdio.h" //二分+并查集,,想想道理何在!
#include "stdlib.h"
#include "algorithm"
using namespace std;
#define INF 0x3fffffff
struct node{
int x,y,dis;
}a[1005];
int set[1005];
int find(int x){
if(set[x]!=x)
set[x] = find(set[x]);
return set[x];
}
int cmp(node u,node v)
{
return u.dis < v.dis;
}
void Union(int x,int y)
{
set[find(x)] = find(y);
}
void init(int n)
{
int i;
for(i=1;i<=n;i++)
set[i] = i;
}
int main()
{
int i,j;
int n,m,q;
while(scanf("%d%d",&n,&m)!=-1)
{
int x,y,k;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&k);
a[i].x = x;
a[i].y = y;
a[i].dis = k;
}
sort(a,a+m,cmp);
scanf("%d",&q);
int min;
while(q--)
{
scanf("%d%d",&x,&y);
min = INF;
for(i=0;i<m;i++)
{
init(n);
for(j=i;j<m;j++)
{
Union(a[j].x,a[j].y);
if(find(x) == find(y))
break;
}
if(j==m) break;
if(min>a[j].dis-a[i].dis)
min = a[j].dis - a[i].dis;
}
if(min == INF)
printf("-1\n");
else
printf("%d\n",min);
}
}
return 0;
}