using System.Linq;
using System.Collections.Generic;
using System;

public class P
{
    public int x { get; set; }
    public int y { get; set; }
}

public class hello
{
    public static int h, w;
    public static void Main()
    {
        string[] line = Console.ReadLine().Trim().Split(' ');
        h = int.Parse(line[0]);
        w = int.Parse(line[1]);
        var map = new int[h, w];
        var ps = new List<P>[26];
        for (int i = 0; i < 26; i++) ps[i] = new List<P>();
        for (int i = 0; i < h; i++)
        {
            var s = Console.ReadLine().Trim();
            for (int j = 0; j < w; j++)
            {
                if (s[j] == '.') map[i, j] = -1;
                else
                {
                    var t = s[j] - 'A';
                    map[i, j] = t;
                    ps[t].Add(new P { x = i, y = j });
                }
            }
        }
        var d0 = new List<int>[26];
        var d1 = new List<int>[26];
        for (int i = 0; i < 26; i++)
        {
            d0[i] = new List<int>();
            d1[i] = new List<int>();
        }
        var root1 = new bool[26];
        makeList(map, ps, d0, d1, root1);
        getAns(ps, d0, d1, root1);
    }
    static void getAns(List<P>[] ps, List<int>[] d0, List<int>[] d1, bool[] root1)
    {
        var res = 0;
        var fin = new bool[26];
        while (true)
        {
            var rf = false;
            for (int i = 0; i < 26; i++)
            {
                if (ps[i].Count() == 2 && !fin[i])
                {
                    if ((root1[i] && d0[i].Count() == 0) |
                            (!root1[i]) && (d0[i].Count() == 0 | d1[i].Count() == 0))
                    {
                        res += 2;
                        rf = true;
                        fin[i] = true;
                        for (int j = 0; j < 26; j++)
                        {
                            d0[j].Remove(i);
                            if (!root1[j]) d1[j].Remove(i);
                        }
                    }
                }
            }
            if (!rf) break;
        }
        Console.WriteLine(res);
    }
    static void makeList(int[,] map, List<P>[] ps, List<int>[] d0, List<int>[] d1, bool[] root1)
    {
        for (int i = 0; i < 26; i++)
        {
            if (ps[i].Count() == 2)
            {
                var x0 = ps[i][0].x;
                var y0 = ps[i][0].y;
                var x1 = ps[i][1].x;
                var y1 = ps[i][1].y;

                if (x0 == x1)
                {
                    root1[i] = true;
                    if (y1 - y0 == 1) d0[i].Add(30);
                    else
                    {
                        for (int j = y0 + 1; j < y1; j++)
                        {
                            var te = map[x0, j];
                            if (te >= 0) d0[i].Add(te);
                        }
                    }
                }
                else if (y0 == y1)
                {
                    root1[i] = true;
                    if (x1 - x0 == 1) d0[i].Add(30);
                    else
                    {
                        for (int j = x0 + 1; j < x1; j++)
                        {
                            var te = map[j, y0];
                            if (te >= 0) d0[i].Add(te);
                        }
                    }
                }
                else
                {
                    if (y1 > y0)
                    {
                        for (int j = y0 + 1; j <= y1; j++)
                        {
                            var te = map[x0, j];
                            if (te >= 0) d0[i].Add(te);
                        }
                        for (int j = x0 + 1; j < x1; j++)
                        {
                            var te = map[j, y1];
                            if (te >= 0) d0[i].Add(te);
                        }
                        for (int j = x0 + 1; j <= x1; j++)
                        {
                            var te = map[j, y0];
                            if (te >= 0) d1[i].Add(te);
                        }
                        for (int j = y0 + 1; j < y1; j++)
                        {
                            var te = map[x1, j];
                            if (te >= 0) d1[i].Add(te);
                        }
                    }
                    else
                    {
                        for (int j = y1; j < y0; j++)
                        {
                            var te = map[x0, j];
                            if (te >= 0) d0[i].Add(te);
                        }
                        for (int j = x0 + 1; j < x1; j++)
                        {
                            var te = map[j, y1];
                            if (te >= 0) d0[i].Add(te);
                        }
                        for (int j = y1 + 1; j <= y0; j++)
                        {
                            var te = map[x1, j];
                            if (te >= 0) d1[i].Add(te);
                        }
                        for (int j = x0 + 1; j < x1; j++)
                        {
                            var te = map[j, y0];
                            if (te >= 0) d1[i].Add(te);
                        }
                    }
                }
            }
        }
        for (int i = 0; i < 26; i++)
        {
            d0[i] = d0[i].Distinct().ToList();
            if (!root1[i]) d1[i] = d1[i].Distinct().ToList();
        }
    }
}



Measured memory_bytes: 19024