#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<deque>
#include<queue>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include <cctype>
#include <climits>
using namespace std;
#define REP(i,a,n) for(int i = a ; i < n ; i++)
#define rep(i,n) REP(i,0,n)

typedef long long ll;
typedef pair<int,int> P;

#define INF P(INT_MAX,INT_MAX)

int dx[] = {0,1,0,-1};
int dy[] = {-1,0,1,0};

int h,w;
char t[502][502];
char t2[502][502];

P getPlace(int x,int y,int dir){
  for(;0<=x && x<w && 0<=y && y<h;x+=dx[dir],y+=dy[dir]){
    if(isalpha(t[y][x])){
      return P(x,y);
    }
  }
  return INF;
}

bool attack(int x,int y){
  if(t[y][x] != '.'){
    return false;
  }

  vector<P> v;
  P tmp = getPlace(x,y,0);
  if(tmp != INF) v.push_back(tmp);
  tmp = getPlace(x,y,1);
  if(tmp != INF) v.push_back(tmp);
  tmp = getPlace(x,y,2);
  if(tmp != INF) v.push_back(tmp);
  tmp = getPlace(x,y,3);
  if(tmp != INF) v.push_back(tmp);

  rep(i,v.size()){
    REP(j,i+1,v.size()){
      int x1 = v[i].first;
      int y1 = v[i].second;
      int x2 = v[j].first;
      int y2 = v[j].second;

      if(t[y1][x1] == t[y2][x2]){
        t[y1][x1] = t[y2][x2] = '.';
        return true;
      }
    }
  }

  return false;
}

void solve(){
  int res = 0;

  while(1){
    bool tmp = false;
    rep(i,h){
      rep(j,w){
        bool flg = attack(j,i);
        if(flg){
          res += 2;
          tmp = true;
          break;
        }
      }
      if(tmp) break;
    }

    if(!tmp){
      cout<<res<<endl;
      return;
    }
  }
}

int main(){
  while(scanf("%d%d",&h,&w) != EOF){
    string del;
    rep(i,w)del+=".";
    bool f = false;
    int count = 0;
    rep(i,h){
      string s;
      cin>>s;
      if(del == s){
        if(f){
          count++;
          continue;
        }
        f = true;
      }else{
        f = false;
      }
      rep(j,w){
        t2[i-count][j] = s[j];
      }
    }
    f = false;
    h -= count;
    del = "";
    count=0;
    rep(i,h){
      del+=".";
    }
    rep(i,w){
      string s;
      rep(j,h){
        s += t2[j][i];
      }
      if(s == del){
        if(f){
          count++;
          continue;
        }
        f = true;
      }
      else{
        f = false;
      }
      rep(j,h){
        t[j][i-count] = s[j];
      }
    }

    w -= count;

    /*
    rep(i,h){
      rep(j,w){
        cout<<t[i][j]<<" ";
      }
      cout<<endl;
    }
    */

    solve();
  }
}