#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 10;
inline long long read() {
  long long x = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9')
    x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  return x;
}
struct edge {
  long long to, nxt;
} e[N << 1];
long long head[N], ecnt;
inline void link(long long u, long long v) {
  e[++ecnt].to = v, e[ecnt].nxt = head[u];
  head[u] = ecnt;
}
long long n, m;
long long sum[N], tot[N];
long long sz[N], dep[N], fa[N][18];
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
void dfs(long long x, long long f) {
  fa[x][0] = f, dep[x] = dep[f] + 1, sum[x] = dep[x];
  sz[x] = 1;
  for (long long i = head[x]; i; i = e[i].nxt) {
    long long y = e[i].to;
    if (y == f) continue;
    dfs(y, x);
    sz[x] += sz[y];
    sum[x] += sum[y];
  }
}
void dfs2(long long x) {
  long long f = fa[x][0];
  if (f) {
    tot[x] = tot[f] + sum[f] - sum[x];
    tot[x] -= 2ll * (sz[f] - sz[x]) * dep[f];
  }
  for (long long i = head[x]; i; i = e[i].nxt)
    if (e[i].to != fa[x][0]) dfs2(e[i].to);
}
inline long long jump(long long x, long long stp) {
  for (long long i = 0; i <= 17; i++)
    if (stp & (1 << i)) x = fa[x][i];
  return x;
}
inline long long LCA(long long x, long long y) {
  if (dep[x] < dep[y]) swap(x, y);
  long long stp = dep[x] - dep[y];
  x = jump(x, stp);
  if (x == y) return x;
  for (long long i = 17; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
signed main() {
  n = read(), m = read();
  for (long long i = 1; i < n; i++) {
    long long u = read(), v = read();
    link(u, v), link(v, u);
  }
  dfs(1, 0), dfs2(1);
  for (long long j = 1; j <= 17; j++)
    for (long long i = 1; i <= n; i++) fa[i][j] = fa[fa[i][j - 1]][j - 1];
  while (m--) {
    long long u = read(), v = read();
    if (dep[u] > dep[v]) swap(u, v);
    long long lca = LCA(u, v);
    long long all, ans;
    if (lca == u) {
      long long son = jump(v, dep[v] - dep[u] - 1);
      long long sz1 = sz[v], sz2 = sz[1] - sz[son];
      all = 1ll * sz1 * sz2, ans = 0;
      ans += 1ll * (sum[v] - dep[v] * sz1) * sz2;
      ans += 1ll * (tot[son] + sz2 * dep[u]) * sz1;
      ans += 1ll * all * (dep[v] - dep[u] + 1);
    } else {
      all = 1ll * sz[u] * sz[v], ans = 0;
      ans += 1ll * sz[u] * (sum[v] - dep[v] * sz[v]);
      ans += 1ll * sz[v] * (sum[u] - dep[u] * sz[u]);
      ans += 1ll * all * (dep[u] + dep[v] - 2 * dep[lca] + 1);
    }
    printf("%.7f\n", 1.0 * ans / all);
  }
}
