#include <bits/stdc++.h>
using namespace std;
const int nm = 1002;
const int xi[] = {-1, 0, 0, 1};
const int yi[] = {0, -1, 1, 0};
const int inf = 1000000000;
int m, n;
char a[nm][nm];
int d[4][nm][nm];
int d2[4][4];
bool fr[nm][nm];
bool hople(int i, int j) {
  return i >= 0 && i < m && j >= 0 && j < n && a[i][j] != '#';
}
void bfs(int x) {
  memset(fr, 1, sizeof(fr));
  queue<pair<int, int> > q;
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j) {
      if (a[i][j] == char(x + 48)) {
        q.push(make_pair(i, j));
        fr[i][j] = 0;
        d[x][i][j] = 0;
      } else
        d[x][i][j] = inf;
    }
  }
  while (!q.empty()) {
    int i = q.front().first, j = q.front().second;
    q.pop();
    for (int k = 0; k < 4; ++k) {
      int i2 = i + xi[k], j2 = j + yi[k];
      if (hople(i2, j2) && fr[i2][j2]) {
        d[x][i2][j2] = d[x][i][j] + 1;
        fr[i2][j2] = 0;
        q.push(make_pair(i2, j2));
        if (a[i2][j2] >= '1' && a[i2][j2] <= '3' && a[i2][j2] != char(x + 48) &&
            d[x][i2][j2] < d2[x][a[i2][j2] - 48]) {
          d2[x][a[i2][j2] - 48] = d2[a[i2][j2] - 48][x] = d[x][i2][j2];
        }
      }
    }
  }
}
void ghi(int res) {
  if (res < inf)
    printf("%d\n", res);
  else
    printf("-1\n");
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 0; i < m; ++i) scanf("%s", a[i]);
  memset(d2, 0x3f, sizeof(d2));
  for (int i = 1; i <= 3; ++i) bfs(i);
  if (d2[1][2] == 1) {
    int res = min(d2[1][3], d2[2][3]) - 1;
    ghi(res);
    return 0;
  }
  if (d2[1][3] == 1) {
    int res = min(d2[2][3], d2[1][2]) - 1;
    ghi(res);
    return 0;
  }
  if (d2[2][3] == 1) {
    int res = min(d2[1][2], d2[1][3]) - 1;
    ghi(res);
    return 0;
  }
  int res = inf;
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j) {
      if (a[i][j] != '#' && d[1][i][j] < inf && d[2][i][j] < inf &&
          d[3][i][j] < inf) {
        res = min(res, d[1][i][j] - 1 + d[2][i][j] - 1 + d[3][i][j] - 1 + 1);
      }
    }
  }
  res = min(res, d2[1][2] + d2[2][3] - 2);
  res = min(res, d2[1][2] + d2[1][3] - 2);
  res = min(res, d2[2][3] + d2[1][3] - 2);
  ghi(res);
}
