#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 10;
const long long LOG = 20;
long long n, m, u, v, w, l, r, h1, h2;
long long h[N];
long long s[N];
long long t[N];
long long tp[N];
long long par[N];
long long anc[LOG + 1][N];
bool mark[N];
vector<long long> adj[N];
long double ans;
void dfs(long long v) {
  mark[v] = 1;
  s[v] = 1;
  for (auto u : adj[v])
    if (!mark[u]) {
      par[u] = v;
      h[u] = h[v] + 1;
      dfs(u);
      s[v] += s[u];
      t[v] += t[u] + s[u];
    }
}
void dfsp(long long v) {
  for (auto u : adj[v])
    if (u != par[v]) {
      tp[u] = tp[v] + t[v] - t[u] - 2 * s[u] + n;
      dfsp(u);
    }
}
long long ancestor(long long v, long long l) {
  if (l < 0) return 0;
  for (long long i = LOG; i >= 0; i--)
    if ((l >> i) & 1) v = anc[i][v];
  return v;
}
long long lca(long long v, long long u) {
  if (h[v] > h[u]) swap(v, u);
  u = ancestor(u, h[u] - h[v]);
  if (v == u) return v;
  for (long long i = LOG; i >= 0; i--)
    if (anc[i][v] != anc[i][u]) v = anc[i][v], u = anc[i][u];
  return par[v];
}
int32_t main() {
  cout << setprecision(9);
  r = 1;
  cin >> n >> m;
  for (long long i = 1; i < n; i++) {
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs(r);
  dfsp(r);
  for (long long i = 1; i <= n; i++) anc[0][i] = par[i];
  for (long long i = 1; i <= LOG; i++)
    for (long long j = 1; j <= n; j++)
      if (anc[i - 1][j]) anc[i][j] = anc[i - 1][anc[i - 1][j]];
  for (long long i = 0; i < m; i++) {
    cin >> u >> v;
    if (h[v] > h[u]) swap(v, u);
    l = lca(u, v);
    h1 = h[u] - h[l];
    h2 = h[v] - h[l];
    w = ancestor(u, h1 - h2 - 1);
    if (l != v)
      ans = (1 + h1 + h2) + ((long double)t[u] / (long double)s[u]) +
            ((long double)t[v] / (long double)s[v]);
    else
      ans = (h1 - h2) + ((long double)t[u] / (long double)s[u]) +
            ((long double)tp[w] / (long double)(s[r] - s[w]));
    cout << ans << '\n';
  }
  return 0;
}
