#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 80;
const int MAXM = 2000;
int n, want, m;
int ghead[MAXN], gnxt[MAXM], gto[MAXM], gcost[MAXM];
int dp[MAXN][MAXN][MAXN + 1];
void run() {
  scanf("%d%d%d", &n, &want, &m);
  for (int i = (0); i < (n); ++i) ghead[i] = -1;
  for (int i = (0); i < (m); ++i) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    --a, --b;
    gcost[i] = c;
    gnxt[i] = ghead[a], ghead[a] = i, gto[i] = b;
  }
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j) dp[i][j][1] = 0;
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j)
      for (int k = (2); k <= (want); ++k) dp[i][j][k] = INT_MAX;
  for (int len = (1); len < (n); ++len)
    for (int i = (0); i < (n); ++i)
      for (int dj = (0); dj < (2); ++dj) {
        int j = dj == 0 ? i + len : i - len;
        if (j < 0 || j >= n) continue;
        for (int k = (2); k <= (min(want, len + 1)); ++k) {
          for (int x = ghead[i]; x != -1; x = gnxt[x]) {
            int to = gto[x];
            if (j < i && (to < j || to >= i)) continue;
            if (i < j && (to <= i || to > j)) continue;
            int ni = j < i ? i - 1 : i + 1;
            if (dp[to][j][k - 1] != INT_MAX) {
              int cur = dp[to][j][k - 1] + gcost[x];
              if (cur < dp[i][j][k]) dp[i][j][k] = cur;
            }
            if (dp[to][ni][k - 1] != INT_MAX) {
              int cur = dp[to][ni][k - 1] + gcost[x];
              if (cur < dp[i][j][k]) dp[i][j][k] = cur;
            }
          }
        }
      }
  int ret = INT_MAX;
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j) ret = min(ret, dp[i][j][want]);
  printf("%d\n", ret == INT_MAX ? -1 : ret);
}
int main() {
  run();
  return 0;
}
