#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
vector<int> elist[100005];
int fa[100005][18];
int dep[100005];
long long rl[100005];
long long sz[100005];
long long tmprl[100005];
long long tmpsz[100005];
long long ael[100005];
void dfs(int node, int par) {
  fa[node][0] = par;
  if (par == -1)
    dep[node] = 0;
  else
    dep[node] = dep[par] + 1;
  int pt = 0;
  while (fa[node][pt] != -1) {
    fa[node][pt + 1] = fa[fa[node][pt]][pt];
    pt++;
  }
  while (pt != 18) fa[node][pt++] = -1;
  rl[node] = 0;
  sz[node] = 1;
  for (int& v : elist[node])
    if (v != par) {
      dfs(v, node);
      sz[node] += sz[v];
      rl[node] += rl[v] + sz[v];
    }
}
void dfs2(int node, int par) {
  ael[node] = tmprl[node];
  int ps = tmpsz[node];
  for (int& v : elist[node]) {
    if (v == par) continue;
    tmprl[node] -= tmprl[v] + tmpsz[v];
    tmpsz[node] -= tmpsz[v];
    tmprl[v] += tmprl[node] + tmpsz[node];
    tmpsz[v] += tmpsz[node];
    dfs2(v, node);
    tmprl[node] = ael[node];
    tmpsz[node] = ps;
  }
}
pair<int, int> distt(int u, int v) {
  int ans = 0;
  if (dep[u] > dep[v]) swap(u, v);
  for (int cnt = 17; cnt >= 0; cnt--) {
    if (fa[v][cnt] != -1 && dep[u] <= dep[fa[v][cnt]]) {
      ans += dep[v] - dep[fa[v][cnt]];
      v = fa[v][cnt];
    }
  }
  for (int cnt = 17; cnt >= 0; cnt--) {
    if (fa[v][cnt] != -1 && fa[u][cnt] != -1 && fa[v][cnt] != fa[u][cnt]) {
      ans += dep[v] - dep[fa[v][cnt]];
      v = fa[v][cnt];
      ans += dep[u] - dep[fa[u][cnt]];
      u = fa[u][cnt];
    }
  }
  if (v != u) return {fa[v][0], ans + 2};
  return {v, ans};
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = (0); i < (n - 1); i++) {
    int u, v;
    cin >> u >> v;
    elist[u].push_back(v);
    elist[v].push_back(u);
  }
  dfs(1, -1);
  memcpy(tmprl, rl, sizeof tmprl);
  memcpy(tmpsz, sz, sizeof tmpsz);
  dfs2(1, -1);
  for (int i = (0); i < (m); i++) {
    int a, b;
    cin >> a >> b;
    long long k = distt(a, b).second;
    if (k != abs(dep[a] - dep[b])) {
      long double v1 = rl[a];
      v1 /= sz[a];
      long double v2 = rl[b];
      v2 /= sz[b];
      cout << fixed << setprecision(12) << 1 + k + v1 + v2 << endl;
    } else {
      if (dep[a] > dep[b]) swap(a, b);
      int underA = b;
      for (int cnt = 17; cnt >= 0; cnt--) {
        if (fa[underA][cnt] != -1 && dep[a] < dep[fa[underA][cnt]])
          underA = fa[underA][cnt];
      }
      long double v1 = (ael[a] - (rl[underA] + sz[underA]));
      v1 /= (n - sz[underA]);
      long double v2 = rl[b];
      v2 /= sz[b];
      cout << fixed << setprecision(12) << 1 + k + v1 + v2 << endl;
    }
  }
}
