#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 5;
long long n, m;
vector<long long> graph[maxn];
long long sum[maxn];
long long sz[maxn];
long long sumall[maxn];
long long depth[maxn];
long long go[maxn][20];
long long tin[maxn], tout[maxn], timer = 0;
void dfs1(long long v, long long p) {
  depth[v] = (p == -1) ? 0 : depth[p] + 1;
  tin[v] = ++timer;
  sum[v] = 0;
  sz[v] = 0;
  for (auto u : graph[v]) {
    if (u != p) {
      dfs1(u, v);
      sum[v] += sum[u];
      sz[v] += sz[u];
    }
  }
  sum[v] += sz[v];
  sz[v]++;
  tout[v] = ++timer;
}
void dfs2(long long v, long long p) {
  if (p == -1) {
    sumall[v] = sum[v];
  } else {
    sumall[v] = sumall[p] + n - 2 * sz[v];
  }
  for (auto u : graph[v]) {
    if (u != p) {
      dfs2(u, v);
    }
  }
}
void dfs3(long long v, long long p) {
  if (p == -1) {
    for (long long i = 0; i < 20; i++) {
      go[v][i] = 0;
    }
  } else {
    go[v][0] = p;
    for (long long i = 1; i < 20; i++) {
      go[v][i] = go[go[v][i - 1]][i - 1];
    }
  }
  for (auto u : graph[v]) {
    if (u != p) {
      dfs3(u, v);
    }
  }
}
bool isAncestor(long long v, long long u) {
  return tin[v] < tin[u] && tout[u] < tout[v];
}
long long get_lca(long long v, long long u) {
  if (isAncestor(v, u)) return v;
  if (isAncestor(u, v)) return u;
  for (long long i = 19; i >= 0; i--) {
    long long t = go[v][i];
    if (!isAncestor(t, u)) v = t;
  }
  return go[v][0];
}
long long get_parent(long long v, long long h) {
  if (depth[v] == h) return v;
  for (long long i = 19; i >= 0; i--) {
    long long t = go[v][i];
    if (depth[t] > h) v = t;
  }
  return go[v][0];
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  for (long long i = 0; i < n - 1; i++) {
    long long a, b;
    cin >> a >> b;
    a--;
    b--;
    graph[a].push_back(b);
    graph[b].push_back(a);
  }
  dfs1(0, -1);
  dfs2(0, -1);
  dfs3(0, -1);
  cout << fixed;
  cout.precision(8);
  for (long long i = 0; i < m; i++) {
    long long v, u;
    cin >> v >> u;
    v--;
    u--;
    if (isAncestor(v, u) || isAncestor(u, v)) {
      if (isAncestor(u, v)) swap(v, u);
      long long t = get_parent(u, depth[v] + 1);
      long double ans = depth[u] - depth[v] + 1;
      ans += sum[u] / (long double)sz[u];
      ans += (sumall[v] - sum[t] - sz[t]) / (long double)(n - sz[t]);
      cout << ans << '\n';
    } else {
      long long lca = get_lca(v, u);
      long double ans = depth[v] + depth[u] - 2 * depth[lca] + 1;
      ans += sum[v] / (long double)sz[v];
      ans += sum[u] / (long double)sz[u];
      cout << ans << '\n';
    }
  }
}
