#include <bits/stdc++.h>
using namespace std;
int r, c;
char ma[50][50];
bool vit[50][50];
const int dy[] = {0, 0, -1, 1}, dx[] = {-1, 1, 0, 0};
bool ok(int y, int x) { return 0 <= y && y < r && 0 <= x && x < c; }
bool dfs(int y, int x, int py, int px) {
  if (vit[y][x]) return true;
  vit[y][x] = true;
  for (int i = 0; i < 4; i++) {
    int ny = y + dy[i];
    int nx = x + dx[i];
    if (ok(ny, nx) && ma[y][x] == ma[ny][nx]) {
      if (!vit[ny][nx]) {
        if (dfs(ny, nx, y, x)) return true;
      } else if (!(ny == py && nx == px))
        return true;
    }
  }
  return false;
}
int main() {
  int i, k;
  scanf("%d %d\n", &r, &c);
  for (i = 0; i < r; i++) {
    for (k = 0; k < c; k++) {
      vit[i][k] = false;
      scanf("%c", &ma[i][k]);
    }
    scanf("\n");
  }
  for (i = 0; i < r; i++)
    for (k = 0; k < c; k++)
      if (!vit[i][k]) {
        if (dfs(i, k, -1, -1)) {
          printf("Yes");
          return 0;
        }
      }
  printf("No");
  return 0;
}
