#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <set>
#define inf 10000000
#define ll __int64
using namespace std;
int Map[600][600],ed[600][600],n,m,cnt;
void Floyd()
{
int i,j,k;
for(k=1;k<=n;k++)
{
for(i=1;i<k;i++)
{
for(j=1;j<i;j++)
{
cnt=min(cnt,ed[i][j]+Map[i][k]+Map[k][j]);
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
ed[i][j]=min(ed[i][j],ed[i][k]+ed[k][j]);
}
}
}
if(cnt>=inf)
{
printf("It's impossible.\n");
}
else
printf("%d\n",cnt);
}
int main()
{
int i,j,k;
while(~scanf("%d%d",&n,&m))
{
cnt=inf;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i!=j)
{
ed[i][j]=Map[i][j]=inf;
}
else
{
ed[i][j]=Map[i][j]=0;
}
}
}
int a,b,c;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(Map[a][b]>c)
{
ed[a][b]=ed[b][a]=Map[a][b]=Map[b][a]=c;
}
}
Floyd();
}
return 0;
}