@General0826
#include <bits/stdc++.h>
using namespace std;
int qp[110][110], fx[5]={0,1,-1,0,0}, fy[5]={0,0,0,1,-1}, zx=20000;
int m, n, qpzx[110][110]={};
bool bj[110][110]={}, gb[110][110]={};
void dfs(int x, int y, int jb){
if(x == m && y == m){
zx = min(zx, jb);
return ;
}
if(jb > qpzx[x][y] && qpzx[x][y] != 0){
return ;
}
bj[x][y] = true;
qpzx[x][y] = jb;
for(int i=1;i<=4;i++){
int nx = x + fx[i];
int ny = y+ fy[i];
if(nx >= 1 && nx<=m && ny >= 1 && ny <= m && !bj[nx][ny]){
if(qp[nx][ny] == qp[x][y]){
dfs(nx, ny, jb);
}
else if(qp[nx][ny] == 0 && !gb[x][y]){
qp[nx][ny] = qp[x][y];
gb[nx][ny] = true;
dfs(nx, ny, jb+2);
qp[nx][ny] = 0;
gb[nx][ny] = false;
}
else if(qp[nx][ny] != 0){
dfs(nx, ny, jb+1);
}
}
}
bj[x][y] = false;
}
int main() {
cin >> m >> n;
for(int i=1, x, y, c;i<=n;i++){
cin >> x >> y >>c;
if(c == 0){
qp[x][y] = 2;
}else qp[x][y] = c;
}
dfs(1,1,0);
if(zx == 20000) printf("-1");
else printf("%d", zx);
return 0;
}