#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;
}