#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 10, lg = 20;
vector<long long> G[maxn];
long long sz[maxn], dep[maxn], dis[maxn], tin[maxn], tout[maxn], t, p[lg][maxn],
    exc[maxn], n;
void dfs(long long now, long long fa, long long d) {
  dep[now] = d;
  sz[now] = 1;
  dis[now] = 0;
  tin[now] = ++t;
  p[0][now] = fa;
  for (long long i = 1; i < lg; ++i) {
    if ((1 << i) > d) break;
    p[i][now] = p[i - 1][p[i - 1][now]];
  }
  for (long long u : G[now])
    if (u != fa) {
      dfs(u, now, d + 1);
      sz[now] += sz[u];
      dis[now] += sz[u] + dis[u];
    }
  tout[now] = t;
}
bool anc(long long a, long long b) {
  return tin[a] <= tin[b] && tout[a] >= tout[b];
}
long long lca(long long a, long long b) {
  for (long long i = 0; i < lg; ++i) {
    if ((dep[b] - dep[a]) >> i & 1) b = p[i][b];
  }
  if (a == b) return a;
  for (long long i = lg - 1; i >= 0; --i) {
    if (p[i][a] != p[i][b]) {
      a = p[i][a];
      b = p[i][b];
    }
    if (a == b) return a;
  }
  return p[0][a];
}
long long getp(long long v, long long k) {
  for (long long i = 0; i < lg; ++i) {
    if (k >> i & 1) {
      v = p[i][v];
      k -= (1 << i);
    }
  }
  return v;
}
long long dist(long long a, long long b) {
  return dep[a] + dep[b] - 2 * dep[lca(a, b)];
}
void dfs2(long long now, long long fa) {
  for (long long u : G[now])
    if (u != fa) {
      exc[u] = exc[now] + n - 2 * sz[u];
      dfs2(u, now);
    }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long m;
  cin >> n >> m;
  for (long long i = 0; i < n - 1; ++i) {
    long long a, b;
    cin >> a >> b;
    G[a].emplace_back(b);
    G[b].emplace_back(a);
  }
  dfs(1, 0, 0);
  exc[1] = dis[1];
  dfs2(1, 0);
  while (m--) {
    long long a, b;
    cin >> a >> b;
    if (dep[a] > dep[b]) swap(a, b);
    double ans = 0.0;
    if (anc(a, b)) {
      long long c = getp(b, dep[b] - dep[a] - 1);
      long long ch = sz[b] * (n - sz[c]);
      long long sum = (exc[a] - dis[c] - sz[c]) * sz[b] +
                      (1 + dist(a, b)) * (n - sz[c]) * sz[b] +
                      dis[b] * (n - sz[c]);
      ans = (double)sum / (double)ch;
    } else {
      long long l = lca(a, b);
      long long ch = sz[a] * sz[b];
      long long sum = sz[b] * dis[a] + sz[a] * dis[b] + ch * (1 + dist(a, b));
      ans = (double)sum / (double)ch;
    }
    cout << fixed << setprecision(20) << ans << endl;
  }
  return 0;
}
