![]()
1 #include<bits/stdc++.h>
2 using namespace std;
3
4 struct Vertex{
5 int start, end;
6 int weight;
7 };
8 Vertex arr[10000];
9 int par[10000];
10 int n, m;
11 int find(int n){
12 while(par[n] != n){
13 n = par[n];
14 }
15 return n;
16 }
17 void merge(int n1, int n2){
18 while(par[n1] != n1){
19 n1 = par[n1];
20 par[n1] = n2;
21 }
22 par[n1] = n2;
23 }
24 bool cmp(Vertex v1, Vertex v2){
25 return v1.weight < v2.weight;
26 }
27
28 void init(){
29 for(int i = 0; i <= n; i++)par[i] = i;
30 }
31
32 long long func(int k){
33 init();
34 int weight_max = 0;
35 int i = 0;
36 bool fail = false;
37 int kk = k;
38 while(i < n-1){
39 if(k >= m){
40 fail = true;
41 break;
42 }
43 Vertex tmp = arr[k++];
44 int n1 = find(tmp.start);
45 int n2 = find(tmp.end);
46 if(n1 == n2){
47 continue;
48 }
49 else{
50 if(i == n-2){
51 weight_max = tmp.weight;
52 }
53 if(n1 > n2)swap(n1, n2);
54 merge(n2, n1);
55 i++;
56 }
57 }
58
59 if(fail) return -1;
60 else return weight_max - arr[kk].weight;
61 }
62
63 int main(){
64 while(scanf("%d%d", &n, &m) != EOF && (n != 0 || m != 0)){
65 init();
66 for(int i = 0; i < m; i++){
67 scanf("%d%d%d", &arr[i].start, &arr[i].end, &arr[i].weight);
68 }
69 int MIN = 100000000;
70 sort(arr, arr+m, cmp);
71 for(int i = 0; i < m; i++){
72 int tmp = func(i);
73 if(tmp != -1)MIN = min(MIN, tmp);
74 }
75 if(MIN == 100000000){
76 printf("-1\n");
77 }
78 else{
79 printf("%d\n", MIN);
80 }
81 }
82 }