#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000010;
const int INF=0x3f3f3f3f;
int n,m,ans=INF,cnt,f[1100],book[1100];
struct pp
{
int a,b,w;
}side[maxn];
bool cmp(pp a ,pp b)
{
return a.w<b.w;
}
int find(int x);
int add(int x,int y);
int main()
{
while(~ scanf("%d%d",&n,&m)&&n)
{
for(int i=1;i<=n;i++) f[i]=i;
cnt=0,ans=INF;
memset(book,0,sizeof book);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d", &side[i].a, &side[i].b, &side[i].w);
}
sort(side+1, side+1+m, cmp);
for(int L=1;L<=m;L++)
{
for(int i=1;i<=n;i++) f[i]=i;
cnt=0;
memset(book,0,sizeof book);
int man=0,mi=INF;
for(int i=L;i<=m;i++)
{
int a=side[i].a,b=side[i].b;
if(find(a)!=find(b))
{
man=max(man,side[i].w);
mi=min(mi,side[i].w);
add(a,b);
}
cnt=0;
for(int j=1;j<=n;j++) if(find(j)==find(1)) cnt++;
// cout<<cnt<<endl;
if(cnt==n)
{
// cout<<": "<<mi<<" "<<man<<" "<<man-mi<<" ";
// cout<<L<<" "<<i<<endl;
ans=min(ans,man-mi);
break;
}
}
}
if(ans==INF) ans=-1;
printf("%d\n",ans);
}
}
int find(int x)
{
return f[x]==x ? x : f[x]=find(f[x]);
}
int add(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy) f[fx]=fy;
}