#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 5;
const int maxlog = 17;
vector<int> G[maxn];
int anc[maxn][maxlog + 2], dep[maxn];
long long size[maxn][2], weisize[maxn][2];
void getdpdown(int now, int fa, int depth) {
  dep[now] = depth, anc[now][0] = fa;
  size[now][0] = 1, weisize[now][0] = 0;
  for (int i = 0; i < G[now].size(); i++) {
    int to = G[now][i];
    if (to == fa) continue;
    getdpdown(to, now, depth + 1);
    size[now][0] += size[to][0];
    weisize[now][0] += weisize[to][0] + size[to][0];
  }
}
void getdpup(int now, int fa, long long fasize, long long faweisize) {
  size[now][1] = fasize + 1, weisize[now][1] = faweisize + fasize;
  for (int i = 0; i < G[now].size(); i++) {
    int to = G[now][i];
    if (to == fa) continue;
    getdpup(
        to, now, fasize + size[now][0] - size[to][0],
        faweisize + fasize + weisize[now][0] - weisize[to][0] - size[to][0]);
  }
}
int LCA(int a, int b, int& id, int& len) {
  id = b;
  len = 1;
  for (int log = maxlog; log >= 0; log--)
    if (anc[b][log] != -1 && dep[anc[b][log]] >= dep[a])
      b = anc[b][log], len += (1 << log);
  if (a == b) {
    for (int log = maxlog; log >= 0; log--)
      if (anc[id][log] != -1 && dep[anc[id][log]] > dep[a]) id = anc[id][log];
    return a;
  }
  len += 2;
  for (int log = maxlog; log >= 0; log--)
    if (anc[a][log] != -1 && anc[b][log] != -1 && anc[a][log] != anc[b][log])
      a = anc[a][log], b = anc[b][log], len += 2 * (1 << log);
  assert(anc[a][0] == anc[b][0]);
  return anc[a][0];
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0, a, b; i < n - 1; i++) {
    cin >> a >> b;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  memset(anc, -1, sizeof anc);
  getdpdown(1, -1, 0);
  getdpup(1, -1, 0, 0);
  for (int log = 1; log <= maxlog; log++)
    for (int i = 1; i <= n; i++)
      if (anc[i][log - 1] != -1) anc[i][log] = anc[anc[i][log - 1]][log - 1];
  for (int i = 0, a, b; i < m; i++) {
    scanf("%d%d", &a, &b);
    if (dep[a] > dep[b]) swap(a, b);
    int id, len, lca = LCA(a, b, id, len);
    long long sizea, weisizea, sizeb, weisizeb;
    if (lca == a)
      sizea = size[a][0] + size[a][1] - 1 - size[id][0], sizeb = size[b][0],
      weisizea = weisize[a][0] + weisize[a][1] - weisize[id][0] - size[id][0],
      weisizeb = weisize[b][0];
    else
      sizea = size[a][0], weisizea = weisize[a][0], sizeb = size[b][0],
      weisizeb = weisize[b][0];
    cout << fixed << setprecision(9)
         << (long double)len +
                (long double)(sizea * weisizeb + sizeb * weisizea) /
                    (long double)(sizea * sizeb)
         << endl;
  }
}
