#include <bits/stdc++.h>
using namespace std;
const int MAXn = 1e5 + 10, MAXlg = 20;
long long dp[MAXn][MAXlg], h[MAXn], dp2[MAXn], n, m, dp3[MAXn], dp4[MAXn];
vector<int> v[MAXn];
bool flag[MAXn], flag2[MAXn];
int make_tree(int a) {
  flag[a] = true;
  int ans = 1;
  h[a] = h[dp[a][0]] + 1;
  if (v[a].size() == 1 && a != 1) {
    dp2[a] = 1;
    return ans;
  }
  for (int i = 0; i < v[a].size(); i++)
    if (!flag[v[a][i]]) {
      dp[v[a][i]][0] = a;
      ans += make_tree(v[a][i]);
      dp3[a] += dp3[v[a][i]];
    }
  dp3[a] += ans - 1;
  dp2[a] = ans;
  return ans;
}
void make_dp(int a) {
  flag2[a] = true;
  for (int i = 0; i < v[a].size(); i++)
    if (!flag2[v[a][i]]) {
      dp4[v[a][i]] = dp4[a] + (n - dp2[a]) + dp3[a] + (dp2[a] - dp2[v[a][i]]) -
                     (dp3[v[a][i]] + dp2[v[a][i]]);
      make_dp(v[a][i]);
    }
}
void make_lca() {
  for (int i = 1; i < MAXlg; i++)
    for (int j = 1; j <= n; j++) dp[j][i] = dp[dp[j][i - 1]][i - 1];
}
long double get_lca(int a, int b) {
  if (h[a] > h[b]) swap(a, b);
  int aa = a, bb = b, cc = b;
  long long dis = h[b] - h[a];
  for (int i = 0; i < MAXlg; i++)
    if ((dis >> i) & 1) b = dp[b][i];
  if (a == b) {
    long double ans = 0;
    dis--;
    for (int i = 0; i < MAXlg; i++)
      if ((dis >> i) & 1) bb = dp[bb][i];
    ans += (long double)(dp4[a] + dp3[a] - dp3[bb] - dp2[bb]) * dp2[cc];
    ans += (long double)(dp3[cc]) * (n - dp2[bb]);
    ans += (long double)(dis + 2) * (dp2[1] - dp2[bb]) * dp2[cc];
    ans /= (long double)(dp2[1] - dp2[bb]) * dp2[cc];
    return ans;
  }
  for (int i = MAXlg - 1; i >= 0; i--)
    if (dp[a][i] != dp[b][i]) {
      a = dp[a][i];
      b = dp[b][i];
    }
  int lca = dp[a][0];
  long double ans = 0;
  ans += (long double)dp3[aa] * dp2[bb] + dp3[bb] * dp2[aa] +
         (long double)((long double)-2 * h[lca] + h[aa] + h[bb] + 1) * dp2[aa] *
             dp2[bb];
  ans /= (long double)dp2[aa] * dp2[bb];
  return ans;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  make_tree(1);
  make_lca();
  make_dp(1);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    cout << fixed << setprecision(10) << get_lca(a, b) << endl;
  }
}
