#include <bits/stdc++.h>
using namespace std;
const int EXP = 19;
const int DIM = 200009;
struct str {
  int a, b, c;
} edg[DIM], teg[DIM];
vector<pair<int, int>> ged[DIM];
int fth[DIM], anc[DIM][EXP], mxm[DIM][EXP], lev[DIM];
inline bool cmp(str e1, str e2) { return e1.c < e2.c; }
inline int getroot(int x) { return fth[x] < 0 ? x : getroot(fth[x]); }
void dfs(int x, int f, int c) {
  lev[x] = lev[f] + 1;
  anc[x][0] = f;
  mxm[x][0] = c;
  for (int i = 1; i < EXP; ++i) {
    anc[x][i] = anc[anc[x][i - 1]][i - 1];
    mxm[x][i] = max(mxm[x][i - 1], mxm[anc[x][i - 1]][i - 1]);
  }
  for (pair<int, int> y : ged[x])
    if (y.first != f) dfs(y.first, x, y.second);
}
int query(int x, int y) {
  int ans = -1e9;
  if (lev[x] > lev[y]) swap(x, y);
  for (int i = EXP - 1; i >= 0; --i) {
    if (lev[y] - (1 << i) < lev[x]) continue;
    ans = max(ans, mxm[y][i]);
    y = anc[y][i];
  }
  for (int i = EXP - 1; i >= 0; --i) {
    if (anc[x][i] == anc[y][i]) continue;
    ans = max(ans, max(mxm[x][i], mxm[y][i]));
    x = anc[x][i];
    y = anc[y][i];
  }
  if (x == y)
    return ans;
  else
    return max(ans, max(mxm[x][0], mxm[y][0]));
}
int main(void) {
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) cin >> edg[i].a >> edg[i].b >> edg[i].c;
  sort(edg + 1, edg + m + 1, cmp);
  fill(fth + 1, fth + n + 1, -1);
  long long s = 0;
  int k = 0;
  for (int i = 1; i <= m; ++i) {
    int x = getroot(edg[i].a), y = getroot(edg[i].b);
    if (x == y) continue;
    if (fth[x] > fth[y]) swap(x, y);
    ged[edg[i].a].push_back(make_pair(edg[i].b, edg[i].c));
    ged[edg[i].b].push_back(make_pair(edg[i].a, edg[i].c));
    fth[x] += fth[y];
    fth[y] = x;
    teg[++k] = edg[i];
    s += edg[i].c;
  }
  if (k == n - 1) dfs(1, 0, 0);
  int q;
  cin >> q;
  while (q--) {
    int x, y;
    cin >> x >> y;
    if (k < n - 2)
      cout << -1 << "\n";
    else if (k == n - 2) {
      int _x = getroot(x), _y = getroot(y);
      if (_x == _y)
        cout << -1 << "\n";
      else
        cout << s << "\n";
    } else
      cout << s - query(x, y) << "\n";
  }
  return 0;
}
