#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000")
using namespace std;
int p[20][100001], h[100001], q[100001], n;
long long s[100001], r[100001];
vector<int> m[100001];
void dfs(int i, int anc) {
  int j, k;
  q[i] = 1;
  s[i] = 0;
  p[0][i] = anc;
  for (j = 0; j < m[i].size(); j++) {
    k = m[i][j];
    if (k != anc) {
      h[k] = h[i] + 1;
      dfs(k, i);
      s[i] += s[k] + q[k];
      q[i] += q[k];
    }
  }
}
void dfs2(int i, int anc) {
  int j, k;
  for (j = 0; j < m[i].size(); j++) {
    k = m[i][j];
    if (k != anc) {
      r[k] = r[i] + s[i] - s[k] - q[k] + n - q[k];
      dfs2(k, i);
    }
  }
}
void up(int &i, int x) {
  for (int k = 20 - 1; k >= 0; k--)
    if (h[p[k][i]] >= x) i = p[k][i];
}
int lca(int i, int j) {
  up(i, h[j]);
  up(j, h[i]);
  if (i == j) return i;
  for (int k = 20 - 1; k >= 0; k--)
    if (p[k][i] != p[k][j]) {
      i = p[k][i];
      j = p[k][j];
    }
  return p[0][i];
}
double fnd(int i, int j) {
  int k = lca(i, j);
  if (k != i && k != j) {
    return (double)s[i] / q[i] + (double)s[j] / q[j] + 1 + h[j] + h[i] -
           2 * h[k];
  } else {
    if (k == j) swap(i, j);
    k = j;
    up(k, h[i] + 1);
    return (double)(r[i] + s[i] - s[k] - q[k]) / (n - q[k]) +
           (double)s[j] / q[j] + 1 + h[j] - h[i];
  }
}
int main() {
  int i, j, k, l;
  scanf("%d%d", &n, &k);
  for (l = n - 1; l--;
       scanf("%d%d", &i, &j), i--, j--, m[i].push_back(j), m[j].push_back(i))
    ;
  dfs(0, 0);
  dfs2(0, 0);
  for (j = 1; j < 20; j++)
    for (i = 0; i < n; p[j][i] = p[j - 1][p[j - 1][i]], i++)
      ;
  for (; k--; scanf("%d%d", &i, &j), printf("%.13lf\n", fnd(i - 1, j - 1)))
    ;
  return 0;
}
