#include <bits/stdc++.h>
using namespace std;
long long MOD = 1000000007;
int d[201][201];
pair<pair<int, int>, int> E[20000];
vector<std::pair<int, int> > Intervals;
int n, m;
bool check(int idx, int x) {
  int u = E[idx].first.first, v = E[idx].first.second, w = E[idx].second;
  Intervals.clear();
  for (int i = 0; i < n; ++i) {
    int d1 = d[u][i], d2 = d[v][i];
    if (d1 > x and d2 > x) return 0;
    int a = 0, b = w;
    a = min(w, x - d1) + 1;
    b = max(0, w - (x - d2)) - 1;
    if (d1 <= x and d2 <= x) {
      if (a > b)
        continue;
      else
        Intervals.push_back(std::make_pair(a, b));
    } else if (d1 <= x) {
      if (a <= w) Intervals.push_back(std::make_pair(a, w));
    } else {
      if (b >= 0) Intervals.push_back(std::make_pair(0, b));
    }
  }
  if (Intervals.size() < 1) return 1;
  sort(Intervals.begin(), Intervals.end());
  if (Intervals[0].first > 0) return 1;
  int maxY = Intervals[0].second;
  for (int i = 1; i < Intervals.size(); ++i) {
    if (Intervals[i].first > maxY) return 1;
    maxY = max(maxY, Intervals[i].second);
  }
  return maxY < w;
}
int solve(int idx) {
  int u = E[idx].first.first, v = E[idx].first.second;
  int l = 0, r = 0, m;
  for (int i = 0; i < n; ++i) {
    r = max(r, min(d[u][i], d[v][i]));
  }
  r += E[idx].second + 10;
  while (r - l > 1) {
    m = (l + r) >> 1;
    bool f = check(idx, m);
    if (f)
      r = m;
    else
      l = m;
  }
  if (check(idx, l))
    return l;
  else
    return r;
}
int main() {
  int u, v, w;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) d[i][j] = (i == j ? 0 : MOD);
  for (int i = 0; i < (m); ++i) {
    scanf("%d %d %d", &u, &v, &w);
    u -= 1, v -= 1, w <<= 1;
    d[u][v] = d[v][u] = w;
    E[i] = std::make_pair(std::make_pair(u, v), w);
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j)
      for (int k = 0; k < n; ++k) {
        d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
      }
  }
  int ans = MOD;
  for (int i = 0; i < (m); ++i) ans = min(ans, solve(i));
  cout << ans / 2.0 << endl;
  return 0;
}
