#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int head[N], cnt, siz[N], dep[N], fa[N][20], n, q;
long long sum_dep[N], res[N];
struct edge {
  int next, to;
} e[N << 1];
int main() {
  auto add = [&](int u, int v) {
    e[++cnt].next = head[u];
    e[cnt].to = v;
    head[u] = cnt;
  };
  function<void(int, int, int)> dfs = [&](int u, int f, int depth) {
    siz[u] = 1;
    sum_dep[u] = dep[u] = depth;
    fa[u][0] = f;
    for (int i = 1; i <= 19; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];
    for (int i = head[u]; i; i = e[i].next) {
      int v = e[i].to;
      if (v == f) continue;
      dfs(v, u, depth + 1);
      sum_dep[u] += sum_dep[v];
      siz[u] += siz[v];
    }
  };
  function<void(int, int)> dfs1 = [&](int u, int f) {
    for (int i = head[u]; i; i = e[i].next) {
      int v = e[i].to;
      if (v == f) continue;
      res[v] = res[u] - siz[v] + (n - siz[v]);
      dfs1(v, u);
    }
  };
  auto LCA = [&](int u, int v) {
    if (dep[u] < dep[v]) swap(u, v);
    int tmp = dep[u] - dep[v];
    if (tmp) {
      tmp--;
      for (int i = 0; (1 << i) <= tmp; i++)
        if (tmp & (1 << i)) u = fa[u][i];
      int x = u;
      u = fa[u][0];
      if (u == v) return make_pair(u, x);
    }
    for (int i = 19; i >= 0; i--)
      if (fa[u][i] != fa[v][i]) u = fa[u][i], v = fa[v][i];
    return make_pair(fa[u][0], u);
  };
  scanf("%d %d", &n, &q);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    add(a, b);
    add(b, a);
  }
  dfs(1, 0, 0);
  res[1] = sum_dep[1];
  dfs1(1, 0);
  while (q--) {
    int a, b;
    scanf("%d %d", &a, &b);
    pair<int, int> lca = LCA(a, b);
    if (dep[a] > dep[b]) swap(a, b);
    if (lca.first != a) {
      long long sum1 = sum_dep[a] - dep[a] * 1ll * siz[a],
                sum2 = sum_dep[b] - dep[b] * 1ll * siz[b];
      long long chu = siz[a] * 1ll * siz[b];
      double ans = (sum1 * siz[b] + sum2 * siz[a]) / (chu + 0.0) + dep[a] +
                   dep[b] - 2 * dep[lca.first] + 1;
      printf("%.10f\n", ans);
    } else {
      int y = lca.second;
      long long sum1 = res[a] - (sum_dep[y] - dep[y] * 1ll * siz[y] + siz[y]),
                sum2 = sum_dep[b] - dep[b] * 1ll * siz[b];
      long long chu = (n - siz[y]) * 1ll * siz[b];
      double ans = (sum1 * siz[b] + sum2 * (n - siz[y])) / (chu + 0.0) +
                   dep[b] - dep[a] + 1;
      printf("%.10f\n", ans);
    }
  }
}
