#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int inf = 100000000;
int n, m, ans;
int map[105][105];
int dis[105][105];
void Floyd() {
int i,j,k;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
dis[i][j] = map[i][j];
for(k = 1; k <= n; k++) {
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
//要经过其它2个不同点
if(i!=j && j!=k && k!=i && dis[i][j]!=inf && map[j][k]!=inf && map[k][i]!=inf && ans > dis[i][j]+map[j][k]+map[k][i])
ans = dis[i][j]+map[j][k]+map[k][i];//要回到i
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(dis[i][k]!=inf && dis[k][j]!=inf && dis[i][j] > dis[i][k]+dis[k][j])
dis[i][j] = dis[i][k]+dis[k][j];
}
}
int main() {
freopen("data.in", "r", stdin);
int i, j, x, y, t;
while(~scanf("%d%d", &n, &m)) {
for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++)
map[i][j] = inf;
map[i][i] = 0;
}
while(m--) {
scanf("%d%d%d", &x, &y, &t);
if(t < map[x][y] && x != y)
map[x][y] = map[y][x] = t;
}
ans = inf;
Floyd();
if(ans == inf)
printf("It's impossible.\n");
else
printf("%d\n",ans);
}
return 0;
}