import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
n , m = map(int,input().split())
array = []
for _ in range(n):
array.append(list(input()))
visit = [[0 for _ in range(m)] for _ in range(n)]
dx = [-1,0,1,0]
dy = [0,1,0,-1]
search = [False]
def DFS(x,y,r,a,b):
if x==a and b==y and visit[x][y] == 2:
search[0] = True
return
visit[x][y] += 1
nx = x + dx[r]
ny = y + dy[r]
if 0<=nx<n and 0<=ny<m:
if array[nx][ny] == array[x][y] and visit[nx][ny] != 1:
DFS(nx,ny,r,a,b)
visit[nx][ny] = 0
else:
for i in range(4):
if abs(i-r) == 2:
continue
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m and array[nx][ny] == array[x][y] and visit[nx][ny] != 1:
DFS(nx,ny,i,a,b)
visit[nx][ny] = 0
else:
for i in range(4):
if abs(i-r) == 2:
continue
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m and array[nx][ny] == array[x][y] and visit[nx][ny] != 1:
DFS(nx,ny,i,a,b)
visit[nx][ny] = 0
for i in range(n):
for j in range(m):
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if 0<=nx<n and 0<=ny<m:
if array[nx][ny] == array[i][j]:
visit[i][j] = 1
DFS(i,j,k,i,j)
visit[i][j] = 0
if search[0]==False:
print("No")
else:
print("Yes")