#include <iostream>
#include <cstdio>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MAXN = 105;
int dis[MAXN][MAXN], g[MAXN][MAXN];
void init()
{
for(int i = 0; i < MAXN; i++)
for(int j = 0; j < MAXN; j++)
{
if(i == j)
dis[i][j] = g[i][j] = 0;
else
dis[i][j] = g[i][j] = inf;
}
}
int floyd(int n)
{
int Min = inf;
for(int k = 1; k <= n; k++)
{
for(int i = 1; i < k; i++)
{
if(g[i][k] == inf)
continue;
for(int j = i + 1; j < k; j++)
{
if(dis[i][j] != inf && g[k][j] != inf
&& dis[i][j] + g[i][k] + g[k][j] < Min)
{
Min = dis[i][j] + g[i][k] + g[k][j];
}
}
}
for(int i = 1; i <= n; i++)
{
if(dis[i][k] == inf)
continue;
for(int j = 1; j <= n; j++)
{
if(dis[k][j] != inf && dis[i][j] > dis[i][k] + dis[k][j])
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
return Min;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
//printf("%d\n%d\n", inf, inf + inf);
//printf("%d\n", 0x7fffffff);
int n, m;
while(scanf("%d %d", &n, &m) == 2)
{
int u, v, w;
init();
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &u, &v, &w);
if(dis[u][v] > w)
{
dis[u][v] = dis[v][u] = w;
g[u][v] = g[v][u] = w;
}
}
int Min = floyd(n);
if(Min >= inf)
printf("It's impossible.\n");
else
printf("%d\n", Min);
}
return 0;
}