#include <bits/stdc++.h>
using namespace std;
int n, m;
int head[110000], nex[110000 * 2], to[110000 * 2];
int t1, t2, tot;
long long f[110000][2], g[110000];
int fa[110000][21], deep[110000];
void add(int x, int y) {
  tot++;
  nex[tot] = head[x];
  head[x] = tot;
  to[tot] = y;
}
void dfs1(int x, int y) {
  g[x] = 1;
  fa[x][0] = y;
  deep[x] = deep[y] + 1;
  for (int i = head[x]; i; i = nex[i])
    if (to[i] != y) {
      dfs1(to[i], x);
      f[x][0] += g[to[i]] + f[to[i]][0];
      g[x] += g[to[i]];
    }
}
void dfs2(int x, int y) {
  if (x != 1) f[x][1] = f[y][1] - g[x] + (n - g[x]);
  for (int i = head[x]; i; i = nex[i])
    if (to[i] != y) dfs2(to[i], x);
}
int find(int x, int y) {
  for (int i = 20; i >= 0; i--)
    if (deep[fa[x][i]] >= y) x = fa[x][i];
  return x;
}
int lca(int x, int y) {
  for (int i = 20; i >= 0; i--)
    if (deep[fa[x][i]] >= deep[y]) x = fa[x][i];
  if (x == y) return x;
  for (int i = 20; 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", &t1, &t2);
    add(t1, t2);
    add(t2, t1);
  }
  dfs1(1, 0);
  f[1][1] = f[1][0];
  dfs2(1, 0);
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= n; j++) fa[j][i] = fa[fa[j][i - 1]][i - 1];
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &t1, &t2);
    if (deep[t1] < deep[t2]) swap(t1, t2);
    int t = lca(t1, t2);
    if (t == t2) {
      t = find(t1, deep[t2] + 1);
      printf("%.8lf\n", (double)(f[t1][0] * (n - g[t]) +
                                 (f[t2][1] - f[t][0] - g[t]) * g[t1]) /
                                (g[t1] * (n - g[t])) +
                            1 + deep[t1] - deep[t2]);
    } else
      printf("%.8lf\n",
             (double)(f[t1][0] * g[t2] + f[t2][0] * g[t1]) / (g[t1] * g[t2]) +
                 1 + deep[t1] + deep[t2] - deep[t] * 2);
  }
  return 0;
}
