#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:65777216")
using namespace std;
int n, m, x, y, z;
vector<pair<int, pair<int, int> > > v;
vector<pair<int, int> > s[111111];
int q[111111][22];
int Q[111111][22];
int d[111111];
void dfs(int ver, int par = -1) {
  for (int i(0); i < (s[ver].size()); i++)
    if (s[ver][i].first != par) {
      q[s[ver][i].first][0] = s[ver][i].second;
      Q[s[ver][i].first][0] = ver;
      d[s[ver][i].first] = d[ver] + 1;
      dfs(s[ver][i].first, ver);
    }
}
int solve(int x, int y) {
  if (d[x] > d[y]) swap(x, y);
  int res = 0;
  for (int i = 20; i >= 0; i--)
    if (d[x] <= d[y] - (1 << i)) {
      res = max(res, q[y][i]);
      y = Q[y][i];
    }
  if (x != y)
    for (int i = 20; i >= 0; i--)
      if (d[x] >= (1 << i))
        while (i == 0 || Q[x][i] != Q[y][i]) {
          res = max(res, q[x][i]);
          res = max(res, q[y][i]);
          x = Q[x][i];
          y = Q[y][i];
          if (x == y) break;
        }
  return res;
}
int p[111111];
int c[111111];
int P(int v) { return v == p[v] ? v : p[v] = P(p[v]); }
void join(int p1, int p2) {
  c[P(p2)] += c[P(p1)];
  p[P(p1)] = P(p2);
}
int main() {
  cin >> n >> m;
  for (int i(0); i < (m); i++) {
    scanf("%d %d %d", &x, &y, &z);
    x--, y--;
    v.push_back(pair<int, pair<int, int> >(z, pair<int, int>(x, y)));
  }
  sort((v).begin(), (v).end());
  for (int i(0); i < (n); i++) p[i] = i, c[i] = 1;
  long long res = 0;
  for (int i(0); i < (v.size()); i++)
    if (P(v[i].second.first) != P(v[i].second.second)) {
      res += v[i].first;
      s[v[i].second.first].push_back(
          pair<int, int>(v[i].second.second, v[i].first));
      s[v[i].second.second].push_back(
          pair<int, int>(v[i].second.first, v[i].first));
      join(v[i].second.first, v[i].second.second);
    }
  if (c[P(0)] == n) {
    dfs(0);
    for (int step = 1; step <= 20; step++)
      for (int i(0); i < (n); i++)
        if (d[i] >= (1 << step)) {
          q[i][step] = max(q[i][step - 1], q[Q[i][step - 1]][step - 1]);
          Q[i][step] = Q[Q[i][step - 1]][step - 1];
        }
  }
  int q;
  cin >> q;
  for (int i(0); i < (q); i++) {
    scanf("%d %d", &x, &y);
    x--, y--;
    if (P(x) != P(y) && c[P(x)] + c[P(y)] != n || P(x) == P(y) && c[P(x)] != n)
      puts("-1");
    else if (P(x) != P(y))
      printf("%I64d\n", res);
    else
      printf("%I64d\n", res - solve(x, y));
  }
  return 0;
}
