#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 12, lg = 18;
long long n, m;
vector<long long> ad[N];
long long par[N][lg];
long long h[N], sz[N];
long long dp[N], pd[N];
void init();
void dfs(long long, long long);
void solve_and_out();
long long LCA(long long, long long);
long long getpar(long long, long long);
void DFS(long long);
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(20);
  init();
  dfs(0, -1);
  DFS(0);
  solve_and_out();
  return 0;
}
void init() {
  cin >> n >> m;
  for (long long i = 1; i < n; i++) {
    long long u, v;
    cin >> u >> v;
    u--, v--;
    ad[u].push_back(v);
    ad[v].push_back(u);
  }
  return;
}
void dfs(long long root, long long P) {
  {
    sz[root] = 1;
    par[root][0] = P;
    for (long long i = 1; i < lg; i++) {
      if (par[root][i - 1] == -1)
        par[root][i] = -1;
      else
        par[root][i] = par[par[root][i - 1]][i - 1];
    }
  }
  for (auto x : ad[root]) {
    if (x == par[root][0]) continue;
    h[x] = h[root] + 1;
    dfs(x, root);
    sz[root] += sz[x];
    dp[root] += dp[x] + sz[x];
  }
  return;
}
void DFS(long long root) {
  if (root == 0) pd[root] = dp[root];
  for (auto x : ad[root]) {
    if (x == par[root][0]) continue;
    pd[x] = pd[root] - sz[x] + (n - sz[x]);
    DFS(x);
  }
  return;
}
void solve_and_out() {
  while (m--) {
    long long u, v;
    cin >> u >> v;
    u--, v--;
    if (h[v] > h[u]) swap(v, u);
    long long L = LCA(u, v);
    if (L == v) {
      long long now = getpar(u, h[u] - h[v] - 1);
      long long DP = pd[v] - dp[now] - sz[now];
      long long SZ = n - sz[now];
      long long val = SZ * sz[u];
      val += (sz[u] * DP) + (SZ * dp[u]);
      val += (h[u] - h[v]) * (SZ * sz[u]);
      cout << (1.0 * val * 1.0) / (1.0 * (SZ * sz[u]) * 1.0) << '\n';
    } else {
      long long val = sz[u] * sz[v];
      val += (sz[v] * dp[u]) + (sz[u] * dp[v]);
      val += (h[v] - h[L] + h[u] - h[L]) * (sz[u] * sz[v]);
      cout << (long double)(1.0 * val) / (1.0 * (long double)(sz[u] * sz[v]))
           << '\n';
    }
  }
  return;
}
long long LCA(long long a, long long b) {
  if (h[a] > h[b]) swap(a, b);
  b = getpar(b, h[b] - h[a]);
  if (b == a) return a;
  for (long long i = lg - 1; i >= 0; i--)
    if (par[a][i] != par[b][i]) {
      a = par[a][i];
      b = par[b][i];
    }
  return par[a][0];
}
long long getpar(long long a, long long H) {
  if (H <= 0) return a;
  for (long long i = 0; i < lg; i++)
    if (H & (1 << i)) a = par[a][i];
  return a;
}
