#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000 + 2;
int siz[MAXN], dis[MAXN];
int pa[MAXN][20];
long long f[MAXN], g[MAXN];
vector<int> G[MAXN];
void dfs0(int u, int p) {
  siz[u] = 1;
  dis[u] = dis[p] + 1;
  f[u] = 0;
  for (int i = 0; i < G[u].size(); ++i) {
    int v = G[u][i];
    if (v == p) continue;
    pa[v][0] = u;
    dfs0(v, u);
    siz[u] += siz[v];
    f[u] += f[v] + siz[v];
  }
}
void dfs1(int u, int p, int n) {
  for (int i = 0; i < G[u].size(); ++i) {
    int v = G[u][i];
    if (v == p) continue;
    g[v] = n + g[u] - 2 * siz[v];
    dfs1(v, u, n);
  }
}
void cal_pa(int n) {
  for (int j = 1; (1 << j) <= n; ++j) {
    for (int i = 1; i <= n; ++i) {
      if (pa[i][j - 1] != -1) pa[i][j] = pa[pa[i][j - 1]][j - 1];
    }
  }
}
int cal_lca(int a, int b) {
  if (dis[a] < dis[b]) swap(a, b);
  int cnt = 0;
  for (; (1 << cnt) <= dis[a]; ++cnt)
    ;
  --cnt;
  for (int j = cnt; j >= 0; --j) {
    if (dis[a] - (1 << j) >= dis[b]) a = pa[a][j];
  }
  if (a == b) return a;
  for (int j = cnt; j >= 0; --j) {
    if (pa[a][j] != -1 && pa[a][j] != pa[b][j]) a = pa[a][j], b = pa[b][j];
  }
  return pa[a][0];
}
int cal(int u, int v) {
  int cnt = 0;
  for (; (1 << cnt) <= dis[u]; ++cnt)
    ;
  --cnt;
  for (int j = cnt; j >= 0; --j) {
    if (dis[u] - (1 << j) > dis[v]) u = pa[u][j];
  }
  return u;
}
void solve(int n, int m) {
  memset(pa, -1, sizeof(pa));
  dfs0(1, 0);
  g[1] = f[1];
  dfs1(1, 0, n);
  cal_pa(n);
  int u, v, lca, w;
  while (m--) {
    scanf("%d %d", &u, &v);
    lca = cal_lca(u, v);
    if (lca != u && lca != v) {
      int tmp = dis[u] + dis[v] - 2 * dis[lca] + 1;
      double ans = tmp + (f[u] + 0.0) / siz[u] + (f[v] + 0.0) / siz[v];
      printf("%.15f\n", ans);
    } else {
      if (lca == u) swap(u, v);
      w = cal(u, v);
      if (pa[w][0] != v) {
        printf("-1");
        return;
      }
      int tmp = dis[u] - dis[v] + 1;
      double ans = tmp + (f[u] + 0.0) / siz[u] +
                   (g[v] - f[w] - siz[w] + 0.0) / (n - siz[w]);
      printf("%.15f\n", ans);
    }
  }
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 1, u, v; i < n; ++i) {
    scanf("%d %d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  solve(n, m);
  return 0;
}
