#include <bits/stdc++.h>
using namespace std;
int d[210][210];
int n, m;
int x[40010], y[40010], len[40010];
pair<int, int> a[210], b[210];
void Floyd() {
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
void solve() {
  int ans = 0x7fffffff;
  Floyd();
  for (int i = 0; i < m; i++) {
    int u = x[i], v = y[i];
    for (int j = 1; j <= n; j++) a[j - 1] = make_pair(d[j][u], d[j][v]);
    sort(a, a + n);
    int kk = 0;
    for (int j = 0; j < n; j++) {
      while (kk && b[kk - 1].second <= a[j].second) kk--;
      b[kk++] = a[j];
    }
    if (kk == 1)
      ans = min(ans, min(b[0].first, b[0].second) << 1);
    else {
      for (int j = 1; j < kk; j++)
        ans = min(ans, len[i] + b[j - 1].first + b[j].second);
    }
  }
  printf("%d", ans / 2);
  if (ans % 2) printf(".5");
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) d[i][j] = 0xfffffff;
    d[i][i] = 0;
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d%d", &x[i], &y[i], &len[i]);
    d[x[i]][y[i]] = d[y[i]][x[i]] = len[i];
  }
  solve();
  return 0;
}
