#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double
const int MAXN = 1e5;
const ll INF = 4e18;
const int MOD = 998244353;
ll L[MAXN + 5], R[MAXN + 5], C[MAXN + 5], W[MAXN + 5];
struct ST{
	ll N;
	vector<ll> sg;
	ST(ll _n){
		N = _n;
		sg.resize(4 * N + 5, INF);
	}
	
	void upd(ll l, ll r, ll cur, ll idx, ll val){
		if(l == r){
			sg[cur] = min(sg[cur], val);
		}
		else{
			ll mid = (l + r) / 2;
			if(idx <= mid) upd(l, mid, cur * 2, idx, val);
			else upd(mid + 1, r, cur * 2 + 1, idx, val);
			sg[cur] = min(sg[cur * 2], sg[cur * 2 + 1]);
		}
	}
	
	ll query(ll l, ll r, ll cur, ll x, ll y){
		if(l > y || r < x) return INF;
		if(l >= x && r <= y) return sg[cur];
		ll mid = (l + r) / 2;
		return min(query(l, mid, cur * 2, x, y), query(mid + 1, r, cur * 2 + 1, x, y));
	}
};
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	int tc = 1;
	// cin >> tc;
	for(;tc--;){
		ll M, N; cin >> M >> N;
		vector<ll> comp;
		comp.push_back(1), comp.push_back(N);
		for(int i = 1; i <= M; i++){
			cin >> L[i] >> R[i] >> C[i] >> W[i];
			comp.push_back(L[i]), comp.push_back(C[i]), comp.push_back(R[i]);
		}
		
		sort(comp.begin(), comp.end());
		
		comp.erase(unique(comp.begin(), comp.end()), comp.end());
		
		auto get_id = [&](ll idx){
			return lower_bound(comp.begin(), comp.end(), idx) - comp.begin() + 1;
		};
		
		ll K = comp.size();
		
		ST ps(K), sf(K);
		
		ps.upd(1, K, 1, get_id(1), 0);
		sf.upd(1, K, 1, get_id(N), 0);
		
		ll ans = INF;
		for(int i = 1; i <= M; i++){
			L[i] = get_id(L[i]), C[i] = get_id(C[i]), R[i] = get_id(R[i]);
			ll X = ps.query(1, K, 1, L[i], R[i]);
			ll Y = sf.query(1, K, 1, L[i], R[i]);
			ans = min(ans, X + Y + W[i]);
			
			// cout << X << " " << Y << " " << i << "\n";
			ps.upd(1, K, 1, C[i], X + W[i]);
			sf.upd(1, K, 1, C[i], Y + W[i]);
		}
		
		cout << (ans == INF ? -1 : ans) << "\n";
	}
}
/*
*/
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |