#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int MX = 20;
int n, m, fa[N][MX], dep[N], sz[N];
long long sum2[N], sum1[N];
vector<int> v[N];
void dfs1(int x, int d) {
  sum1[x] = 0;
  sz[x] = 1;
  dep[x] = d;
  for (int i = 0; i < v[x].size(); i++) {
    int y = v[x][i];
    if (y == fa[x][0]) continue;
    fa[y][0] = x;
    dfs1(y, d + 1);
    sz[x] += sz[y];
    sum1[x] += sum1[y];
  }
  sum1[x] += sz[x];
}
void dfs2(int x) {
  for (int i = 0; i < v[x].size(); i++) {
    int y = v[x][i];
    if (y == fa[x][0]) continue;
    sum2[y] = sum2[x] - sz[y] + n - sz[y];
    dfs2(y);
  }
}
int getLca(int x, int y) {
  int len = dep[x] - dep[y];
  for (int i = 0; i < MX; i++)
    if (len >> i & 1) x = fa[x][i];
  if (x == y) return x;
  for (int i = MX - 1; ~i; i--)
    if (fa[x][i] != fa[y][i]) {
      x = fa[x][i];
      y = fa[y][i];
    }
  return fa[x][0];
}
int main() {
  int x, y;
  long long cnt;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    x--, y--;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  memset(fa, -1, sizeof(fa));
  dfs1(0, 0);
  sum2[0] = sum1[0];
  dfs2(0);
  for (int j = 1; j < MX; j++)
    for (int i = 0; i < n; i++)
      if (~fa[i][j - 1]) fa[i][j] = fa[fa[i][j - 1]][j - 1];
  long long ans = 0;
  while (m--) {
    int na, nb;
    int path;
    scanf("%d%d", &x, &y);
    x--, y--;
    if (dep[x] < dep[y]) swap(x, y);
    int lca = getLca(x, y);
    path = dep[x] - dep[lca] + dep[y] - dep[lca] - 1;
    if (lca == y) {
      na = sz[x];
      int z = x;
      for (int i = 0; i < MX; i++)
        if ((dep[x] - dep[y] - 1) >> i & 1) z = fa[z][i];
      nb = n - sz[z];
      cnt = (long long)na * nb;
      ans = sum1[x] * nb + (sum2[y] - (sum1[z] + sz[z])) * na + cnt * path;
    } else {
      na = sz[x];
      nb = sz[y];
      cnt = (long long)sz[x] * sz[y];
      ans = sum1[x] * nb + sum1[y] * na + cnt * path;
    }
    printf("%.10f\n", ans * 1.0 / cnt);
  }
  return 0;
}
