    vector<vector<long long>> map;
    map.resize(100002);
    for(int i=0;i<map.size();i++){
        map[i].resize(100002);
    }

    for(int i=0;i<map.size();i++){
        for(int j=0;j<map[i].size();j++){
            map[i][j]=0;
        }
    }



    int N;scanf("%d",&N);
    int M;scanf("%d",&M);
    vector<int> L;
    vector<int> R;
    vector<int> D;

    for(int i=0;i<M;i++){
        int l,r,d;
        scanf("%d %d %d",&l,&r,&d);
        map[r][l]=d;
    }

    bool isOk=true;
    int tmp=0;
    for(int i=1;i<=N;i++){
        for(int j=1;j<=N;j++){
            if(map[i][j]==0){
                continue;
            }else {
                int max=map[i][j];
                for(int k=1;k<=N;k++){
                    tmp=map[k][j]+map[i][k];
                    if(max<tmp){
                        isOk=false;
                    }
                }
            }
        }
    }

    if(isOk){
        printf("Yes");
    }else{
        printf("No");
    }