#include <bits/stdc++.h>
using namespace std;
int subtreeSize[200000];
int parent[200000][20];
int depth[200000];
vector<int> edges[200000];
long long lenSum[200000];
long long up[200000];
int n;
void dfs2(int node, int par) {
  if (par == -1)
    up[node] = 0;
  else {
    up[node] = up[par] + lenSum[par] - (lenSum[node] + subtreeSize[node]);
    up[node] += (n - subtreeSize[node]);
  }
  for (int i = 0; i < (int)edges[node].size(); i++)
    if (edges[node][i] != par) dfs2(edges[node][i], node);
}
void dfs(int node, int par) {
  if (par == -1)
    depth[node] = 0;
  else
    depth[node] = depth[par] + 1;
  parent[node][0] = par;
  subtreeSize[node] = 1;
  lenSum[node] = 0;
  for (int i = 0; i < (int)edges[node].size(); i++) {
    int v = edges[node][i];
    if (v == par) continue;
    dfs(v, node);
    subtreeSize[node] += subtreeSize[v];
    lenSum[node] += (lenSum[v] + subtreeSize[v]);
  }
}
int lca(int u, int v) {
  if (depth[u] > depth[v]) swap(u, v);
  for (int i = 19; i >= 0; i--)
    if ((depth[v] - (1 << i) >= depth[u])) v = parent[v][i];
  if (u == v) return u;
  for (int i = 19; i >= 0; i--) {
    if (parent[u][i] != parent[v][i]) {
      u = parent[u][i];
      v = parent[v][i];
    }
  }
  return parent[u][0];
}
int G(int u, int v) {
  int d = depth[v] - depth[u] - 1;
  for (int i = 19; i >= 0; i--)
    if (d & (1 << i)) v = parent[v][i];
  return v;
}
void ans(int u, int v) {
  double ret = 0.0;
  if (depth[u] > depth[v]) swap(u, v);
  int L = lca(u, v);
  ret += 1 + (depth[v] + depth[u] - 2 * depth[L]);
  ret += ((1.0 * lenSum[v]) / subtreeSize[v]);
  if (L == u) {
    int ele = G(u, v);
    long long temp = up[u] + lenSum[u] - (lenSum[ele] + subtreeSize[ele]);
    ret += ((1.0 * temp) / (n - subtreeSize[ele]));
  } else {
    ret += (1.0 * lenSum[u]) / (subtreeSize[u]);
  }
  printf("%.9lf\n", ret);
}
int main() {
  int m;
  scanf("%d", &n);
  scanf("%d", &m);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    edges[a].push_back(b);
    edges[b].push_back(a);
  }
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < 20; j++) parent[i][j] = -1;
  dfs(1, -1);
  dfs2(1, -1);
  for (int j = 1; j < 20; j++)
    for (int i = 1; i <= n; i++)
      if (parent[i][j - 1] >= 1) parent[i][j] = parent[parent[i][j - 1]][j - 1];
  while (m--) {
    int u, v;
    scanf("%d", &u);
    scanf("%d", &v);
    ans(u, v);
  }
  return 0;
}
