#include <bits/stdc++.h>
using namespace std;

int N, M, cost, ans;
vector<int> s, t, c, a, b, p, m, temperature;

void Try(int k) {
    for (int i = 1; i >= 0; --i) { // Đang xét điều hòa thứ k (có thể chọn (i=1) hoặc không chọn (i=0)).
        if (i == 1) { // Nếu chọn điều hòa thứ k,
            cost += m[k]; // cộng thêm vào chi phí hiện tại (cost),
            for (int j = a[k]; j <= b[k]; ++j) {
                temperature[j] -= p[k]; // giảm nhiệt độ các ô tương ứng nếu chọn điều hòa thứ k
            }
        }
        if (k == M) { // Nếu đã xét đến điều hòa cuối cùng (mỗi điều hòa đều có trạng thái chọn hoặc không chọn) thì tiến hành kiểm tra cách chọn hiện tại.
            bool checking = true; // Kiểm tra các con bò có thỏa mãn hay không.
            for (int j = 1; j <= N; ++j) {
                bool valid = true; // Kiểm tra mọi ô của con bò thứ j có thỏa mãn hay không.
                for (int l = s[j]; l <= t[j]; ++l) { // Duyệt qua các ô của con bò thứ j.
                    if (temperature[l] > -c[j]) { // Nếu tồn tại một ô chưa đủ mát,
                        valid = false; // thì con bò j không thỏa mãn,
                        break; // và lập tức dừng, không cần kiểm tra các ô khác của con bò này.
                    }
                }
                if (!valid) { // Nếu có tồn tại một con bò không thỏa mãn,
                    checking = false; // thì cách chọn điều hòa hiện tại không thỏa mãn,
                    break; // và lập tức dừng, không cần kiểm tra các con bò khác
                }
            }
            if (checking) { // Nếu cách chọn điều hòa này thỏa mãn toàn bộ các con bò,
                ans = min(ans, cost); // thì cập nhật đáp án.
            }
        } else { // Nếu điều hòa đang xét chưa phải điều hòa cuối cùng,
            Try(k + 1); // thì xét tiếp điều hòa k+1.
        }
        if (i == 1) { // Nếu lúc nãy có chọn điều hòa thứ k, thì phải trả lại trạng thái ban đầu trước khi chọn điều hòa thứ k.
            cost -= m[k]; // Lúc nãy có cộng chi phí vào nếu chọn điều hòa thứ k, thì bây giờ phải trừ đi.
            for (int j = a[k]; j <= b[k]; ++j) {
                temperature[j] += p[k]; // Lúc nãy có trừ nhiệt độ nếu chọn điều hòa thứ k, thì bây giờ phải cộng lên.
            }
        }
    }
}

void Solve() {
    // Nhập dữ liệu
    cin >> N >> M;
    s.resize(N + 1), t.resize(N + 1), c.resize(N + 1);
    for (int i = 1; i <= N; ++i) {
        cin >> s[i] >> t[i] >> c[i];
    }
    a.resize(M + 1), b.resize(M + 1), p.resize(M + 1), m.resize(M + 1);
    for (int i = 1; i <= M; ++i) {
        cin >> a[i] >> b[i] >> p[i] >> m[i];
    }
    temperature.assign(101, 0); // Ban đầu nhiệt độ của 100 ô bằng 0.
    ans = 1e9; // lưu kết quả (answer)
    Try(1); // Đệ quy để xét toàn bộ các cách chọn điều hòa (mỗi điều hòa từ thứ 1 đến thứ M phải có một trong hai trạng thái: chọn hoặc không chọn).
    cout << ans;
}

int main() {
    ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0);
    if (fopen("test.inp", "r")) {
        freopen("test.inp", "r", stdin);
        freopen("test.out", "w", stdout);
    }
    Solve();
}