#include <iostream>
#include <iomanip>
using namespace std;

const int infinity = 1000000000;
const int N = 102;

int dijkstra(int w[N][N], int n, int s, int t) {
    bool b[N];
    int d[N];
    for (int i = 0; i < n; i += 1) {
        b[i] = false;
        d[i] = w[s][i];
    }
    b[s] = true;
    d[s] = 0;
    for (;;) {
        int v = -1;
        for (int i = 0; i < n; i += 1) {
            if (!b[i] && (v == -1 || d[i] < d[v])) {
                v = i;
            }
        }
        if (v == -1) {
            break;
        }
        b[v] = true;
        for (int i = 0; i < n; i += 1) {
            if (!b[i] && d[i] > d[v] + w[v][i]) {
                d[i] = d[v] + w[v][i];
            }
        }
    }
    return d[t];
}

int m, n, p[N], l[N], x[N], t[N][N], v[N][N], d[N][N];

void read() {
    cin >> m >> n;
    for (int i = 1; i <= n; i += 1) {
        cin >> p[i] >> l[i] >> x[i];
        for (int j = 0; j < x[i]; j += 1) {
            cin >> t[i][j] >> v[i][j];
        }
    }
}

void build(int lower, int upper) {
    for (int i = 0; i <= n; i += 1) {
        for (int j = 0; j <= n; j += 1) {
            d[i][j] = infinity;
        }
    }
    for (int i = 0; i <= n; i += 1) {
        d[i][i] = 0;
    }
    for (int i = 1; i <= n; i += 1) {
        if (lower <= l[i] && l[i] <= upper) {
            d[0][i] = p[i];
            for (int j = 0; j < x[i]; j += 1) {
                d[t[i][j]][i] = v[i][j];
            }
        }
    }
}

void solve() {
    int ans = infinity;
    for (int lower = l[1] - m; lower <= l[1]; lower += 1) {
        int upper = lower + m;
        build(lower, upper);
        ans = min(ans, dijkstra(d, n+1, 0, 1));
    }
    cout << ans << endl;
}

int main() {
    read();
    solve();
    return 0;
}