#include <bits/stdc++.h>
using namespace std;
int n, m;
std::vector<int> v[100010];
int subt[100010], depth[100010];
long long len[100010], upar[100010];
int pa[30][100010];
void dfs(int u, int par, int d) {
  depth[u] = d;
  pa[0][u] = par;
  subt[u] = 1;
  len[u] = 0;
  for (int i = 0; i < (int)v[u].size(); ++i) {
    int nx = v[u][i];
    if (nx == par) continue;
    dfs(nx, u, d + 1);
    len[u] += (len[nx] + subt[nx]);
    subt[u] += (subt[nx]);
  }
}
void dfs2(int u, int par) {
  if (par == -1)
    upar[u] = 0;
  else {
    upar[u] = upar[par] + len[par] - (len[u] + subt[u]);
    upar[u] += (n - subt[u]);
  }
  for (int i = 0; i < (int)v[u].size(); ++i) {
    int nx = v[u][i];
    if (nx != par) dfs2(nx, u);
  }
}
int lca(int u, int v) {
  if (depth[u] < depth[v]) swap(u, v);
  int diff = depth[u] - depth[v];
  for (int i = 0; i <= 20; i++)
    if ((1 << i) & diff) u = pa[i][u];
  if (u == v) return u;
  for (int i = 20; i >= 0; i--) {
    if (pa[i][u] != pa[i][v]) {
      u = pa[i][u];
      v = pa[i][v];
    }
  }
  return pa[0][u];
}
int sol(int u, int d) {
  for (int i = 22; i >= 0; i--) {
    if ((1 << i) & d) u = pa[i][u];
  }
  return u;
}
void solve(int u, int v) {
  if (depth[u] < depth[v]) swap(u, v);
  int lc = lca(u, v);
  double ans = 0.0;
  if (lc != u && lc != v) {
    ans = 1.0 + (depth[u] + depth[v] - 2 * depth[lc]);
    ans = ans + (double)len[u] / (double)subt[u];
    ans = ans + (double)len[v] / (double)subt[v];
  } else {
    int el = sol(u, depth[u] - depth[v] - 1);
    ans = 1.0 + (depth[u] + depth[v] - 2 * depth[lc]);
    ans = ans + (double)len[u] / (double)subt[u];
    long long t = upar[v] + len[v] - (len[el] + subt[el]);
    ans = ans + (double)(t) / (double)(n - subt[el]);
  }
  printf("%.9lf\n", ans);
}
int main() {
  int ui, vi, i;
  scanf("%d", &n);
  scanf("%d", &m);
  for (i = (int)0; i < (int)n - 1; i++) {
    scanf("%d", &ui);
    scanf("%d", &vi);
    v[ui].push_back(vi);
    v[vi].push_back(ui);
  }
  dfs(1, -1, 0);
  dfs2(1, -1);
  for (int i = 1; i < 20; i++) {
    for (int j = 1; j <= n; j++) {
      if (pa[i - 1][j] != -1) {
        pa[i][j] = pa[i - 1][pa[i - 1][j]];
      }
    }
  }
  for (i = (int)0; i < (int)m; i++) {
    scanf("%d", &ui);
    scanf("%d", &vi);
    solve(ui, vi);
  }
  return 0;
}
