#include <bits/stdc++.h>
using namespace std;
vector<int> g[100010];
int n, m;
long long sum1[100010], sz[100010], dep[100010], sum2[100010];
int fa[100010][18];
void dfs1(int now, int ff, int dd) {
  dep[now] = dd;
  fa[now][0] = ff;
  sz[now] = 1;
  for (int i = 1; i <= 17; i++) {
    fa[now][i] = fa[fa[now][i - 1]][i - 1];
  }
  for (int i = 0; i < g[now].size(); i++) {
    if (g[now][i] == ff) continue;
    dfs1(g[now][i], now, dd + 1);
    sz[now] += sz[g[now][i]];
    sum1[now] += sum1[g[now][i]] + sz[g[now][i]];
  }
}
void dfs2(int now, int ff) {
  if (now == 1)
    sum2[now] = 0;
  else
    sum2[now] = sum2[ff] + sum1[ff] - sum1[now] + n - 2 * sz[now];
  for (int i = 0; i < g[now].size(); i++) {
    if (g[now][i] == ff) continue;
    dfs2(g[now][i], now);
  }
}
int lca(int x, int y, int opt) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = 17; i >= 0; i--) {
    if (dep[fa[x][i]] > dep[y]) x = fa[x][i];
  }
  if (opt && fa[x][0] == y) return x;
  if (dep[x] > dep[y]) x = fa[x][0];
  if (x == y) return x;
  for (int i = 17; i >= 0; i--) {
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  }
  return opt ? x : fa[x][0];
}
int main() {
  scanf("%d%d", &n, &m);
  int from, to;
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &from, &to);
    g[from].push_back(to);
    g[to].push_back(from);
  }
  dfs1(1, 0, 1);
  dfs2(1, 0);
  int a, b;
  while (m--) {
    scanf("%d%d", &a, &b);
    if (dep[a] < dep[b]) swap(a, b);
    int lc = lca(a, b, 0);
    if (lc == b) {
      int lcs = lca(a, b, 1);
      printf("%.6lf\n",
             1.0 * (sum2[b] + sum1[b] - sum1[lcs] - sz[lcs]) / (n - sz[lcs]) +
                 dep[a] - dep[b] + 1.0 * sum1[a] / sz[a] + 1);
    } else {
      printf("%.6lf\n", 1.0 * sum1[b] / sz[b] + dep[a] + dep[b] - 2 * dep[lc] +
                            1.0 * sum1[a] / sz[a] + 1);
    }
  }
}
