n,m = map(int,input().split()) edge = [[] for i in range(n)] edge_cost = {} edge_weight = [] for _ in range(m): u,v,c = map(int,input().split()) edge[u-1].append(v-1) edge_cost[u-1,v-1] = 0 edge_weight.append((u-1,v-1,c)) ans = [[-1 for j in range(n)] for i in range(n)] edge_weight.sort(key = lambda x:x[2]) for s in range(n): for u,v in edge_cost: edge_cost[u,v] = 1 dist = [10**18 for i in range(n)] dist[s] = 0 def dfs(t,w): que = [t] while que: v = que.pop() for nv in edge[v]: if dist[v]!=-10**18: if dist[nv] > dist[v] + edge_cost[v,nv]: dist[nv] = dist[v] + edge_cost[v,nv] if dist[nv] < -n: dist[nv] = -10**18 if dist[nv]<=0 and ans[s][nv]==-1: ans[s][nv] = w que.append(nv) else: if dist[nv]!=-10**18: dist[nv] = -10**18 if ans[s][nv]==-1: ans[s][nv] = w que.append(nv) dfs(s,-1) for u,v,w in edge_weight: edge_cost[u,v] = -1 if dist[u]==10**18: continue if dist[v] > dist[u] + edge_cost[u,v]: dist[v] = dist[u] + edge_cost[u,v] if dist[v] < -n: dist[v] = -10**18 if dist[v]<=0 and ans[s][v]==-1: ans[s][v] = w dfs(v,w) Q = int(input()) res = [-1]*Q for i in range(Q): s,t = map(int,input().split()) res[i] = ans[s-1][t-1] print(*res,sep="\n")