#include <bits/stdc++.h>
int N, M, head[100001], next[199999], to[199999], E, J[17][100001],
    *fa = J[0], size[100001], dep[100001], q[100001], LOG;
long long f[100001], g[100001];
void BFS() {
  int H = 0, T = 1, u;
  q[1] = 1;
  while (H < T)
    for (int e = head[u = q[++H]]; e; e = next[e])
      if (to[e] != fa[u]) {
        fa[q[++T] = to[e]] = u;
        dep[to[e]] = dep[u] + 1;
      }
  for (int i = N; i; i--) {
    int u = q[i];
    size[u] = 1;
    for (int e = head[u]; e; e = next[e])
      if (to[e] != fa[u]) {
        f[u] += f[to[e]] + size[to[e]];
        size[u] += size[to[e]];
      }
  }
  for (int i = 1; i <= N; i++) {
    int u = q[i];
    long long full = i == 1 ? 0 : g[u] + N - size[u];
    for (int e = head[u]; e; e = next[e])
      if (to[e] != fa[u]) full += f[to[e]] + size[to[e]];
    for (int e = head[u]; e; e = next[e])
      if (to[e] != fa[u]) g[to[e]] = full - f[to[e]] - size[to[e]];
  }
  while (2 << LOG < N) LOG++;
  for (int i = 1; i <= LOG; i++)
    for (int j = 1; j <= N; j++) J[i][j] = J[i - 1][J[i - 1][j]];
}
int LCA(int u, int v) {
  if (dep[u] > dep[v]) std::swap(u, v);
  for (int i = LOG; ~i; i--)
    if (dep[v] - dep[u] >= 1 << i) v = J[i][v];
  if (u == v) return u;
  for (int i = LOG; ~i; i--)
    if (J[i][u] != J[i][v]) {
      u = J[i][u];
      v = J[i][v];
    }
  return fa[u];
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1, u, v; i < N; i++) {
    scanf("%d%d", &u, &v);
    next[++E] = head[u], to[E] = v, head[u] = E;
    next[++E] = head[v], to[E] = u, head[v] = E;
  }
  BFS();
  while (M--) {
    int u, v, lca;
    scanf("%d%d", &u, &v);
    lca = LCA(u, v);
    if (lca == u) std::swap(u, v);
    if (lca == v) {
      int near = u;
      for (int i = LOG; ~i; i--)
        if (dep[J[i][near]] > dep[v]) near = J[i][near];
      printf("%.10Lf\n", dep[u] - dep[v] + (long double)f[u] / size[u] +
                             (long double)g[near] / (N - size[near]) + 1);
    } else
      printf("%.10Lf\n", dep[u] + dep[v] - (dep[lca] << 1) +
                             (long double)f[u] / size[u] +
                             (long double)f[v] / size[v] + 1);
  }
  return 0;
}
