#include <bits/stdc++.h>
using namespace std;
const int maxn = 100100;
int n, m, x, y, fa[maxn][18], size[maxn], dp[maxn];
double up[maxn], down[maxn];
vector<int> g[maxn];
void dfs(int x) {
  size[x] = 1;
  dp[x] = dp[fa[x][0]] + 1;
  for (int i = 1; fa[x][i - 1]; i++) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (int i = 0; i < (int)g[x].size(); i++)
    if (g[x][i] != fa[x][0]) {
      int v = g[x][i];
      fa[v][0] = x;
      dfs(v);
      size[x] += size[v];
      down[x] += (size[v] - 1) * down[v];
    }
  if (size[x] > 1) down[x] = down[x] / (size[x] - 1) + 1;
}
void DFS(int x) {
  for (int i = 0; i < (int)g[x].size(); i++)
    if (g[x][i] != fa[x][0]) {
      int v = g[x][i];
      up[v] = ((n - size[x]) * up[x] + down[x] * (size[x] - 1) -
               (size[v] - 1) * down[v] - size[v]) /
                  (n - size[v]) +
              1;
      DFS(v);
    }
}
int lca(int x, int y) {
  for (int i = 16; i >= 0; i--)
    if (dp[fa[y][i]] >= dp[x]) y = fa[y][i];
  if (x == y) return x;
  for (int i = 16; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1);
  DFS(1);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    if (dp[x] > dp[y]) swap(x, y);
    int z = lca(x, y);
    double ans;
    if (z == x) {
      int xx = y;
      for (int i = 16; i >= 0; i--)
        if (dp[fa[xx][i]] > dp[x]) xx = fa[xx][i];
      ans = dp[y] - dp[x] + down[y] * (size[y] - 1) / size[y] + up[xx];
    } else
      ans = dp[x] + dp[y] - 2 * dp[z] + down[x] * (size[x] - 1) / size[x] +
            down[y] * (size[y] - 1) / size[y] + 1;
    printf("%.8f\n", ans);
  }
  return 0;
}
