if __name__ =='__main__':
max_int =10005# 设置最大路径,因为边最大距离为10^4
n, m =map(int,input().split())
grid =[[max_int]*(n+1)for _ inrange(n+1)]# 初始化二维dp数组for _ inrange(m):
p1, p2, val =map(int,input().split())
grid[p1][p2]= val
grid[p2][p1]= val
# 开始floydfor k inrange(1, n+1):for i inrange(1, n+1):for j inrange(1, n+1):
grid[i][j]=min(grid[i][j], grid[i][k]+ grid[k][j])# 输出结果
z =int(input())for _ inrange(z):
start, end =map(int,input().split())if grid[start][end]== max_int:print(-1)else:print(grid[start][end])