#include <bits/stdc++.h>
using namespace std;
const int maxn = 85;
const int MAX = 1000000000;
struct Tedge {
  int y;
  int d;
};
int n, K, m, old, now;
int f[2][maxn + 1][maxn + 1][maxn + 1];
vector<Tedge> g[maxn + 1];
int result;
void init() {
  int i, j, x, y, d;
  Tedge e;
  scanf("%d%d", &n, &K);
  scanf("%d", &m);
  for (i = 1; i <= m; ++i) {
    scanf("%d%d%d", &x, &y, &d);
    e.y = y;
    e.d = d;
    g[x].push_back(e);
  }
}
void work() {
  int l, r, p, i, j, k, t, y, d, zx;
  if (K == 1) {
    result = 0;
    return;
  }
  now = 0;
  for (l = 0; l <= n + 1; ++l)
    for (r = l + 1; r <= n + 1; ++r)
      for (p = l; p <= r; ++p) f[now][l][r][p] = MAX;
  for (i = 1; i <= n; ++i)
    for (j = 0; j < g[i].size(); ++j) {
      y = g[i][j].y;
      d = g[i][j].d;
      if (i == y) continue;
      if (y > i) {
        if (d < f[now][i][n + 1][y]) f[now][i][n + 1][y] = d;
      } else {
        if (d < f[now][0][i][y]) f[now][0][i][y] = d;
      }
    }
  for (k = 3; k <= K; ++k) {
    old = now;
    now = 1 - now;
    for (l = 0; l <= n + 1; ++l)
      for (r = l + 1; r <= n + 1; ++r)
        for (p = l; p <= r; ++p) f[now][l][r][p] = MAX;
    for (l = 0; l <= n + 1; ++l)
      for (p = l + 1; p <= n; ++p) {
        zx = MAX;
        for (r = p + 1; r <= n + 1; ++r) {
          if (f[old][l][r][p] < zx) zx = f[old][l][r][p];
        }
        if (zx == MAX) continue;
        for (j = 0; j < g[p].size(); ++j) {
          y = g[p][j].y;
          d = g[p][j].d;
          if (y <= l || y >= p) continue;
          if (zx + d < f[now][l][p][y]) f[now][l][p][y] = zx + d;
        }
      }
    for (r = 1; r <= n + 1; ++r)
      for (p = 1; p <= r - 1; ++p) {
        zx = MAX;
        for (l = 0; l < p; ++l) {
          if (f[old][l][r][p] < zx) zx = f[old][l][r][p];
        }
        if (zx == MAX) continue;
        for (j = 0; j < g[p].size(); ++j) {
          y = g[p][j].y;
          d = g[p][j].d;
          if (y <= p || y >= r) continue;
          if (zx + d < f[now][p][r][y]) f[now][p][r][y] = zx + d;
        }
      }
  }
  result = -1;
  for (l = 0; l <= n + 1; ++l)
    for (r = l + 1; r <= n + 1; ++r)
      for (p = l; p <= r; ++p) {
        if (f[now][l][r][p] == MAX) continue;
        if (result == -1 || f[now][l][r][p] < result) result = f[now][l][r][p];
      }
}
void output() { printf("%d\n", result); }
int main() {
  init();
  work();
  output();
  return 0;
}
