#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
char a[1005][1005];
int mp[1005][1005];
int vis[1004][1005];
int dist[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
int t,r,c;
string s;
int valid(int x,int y)
{
    if(x>=r || x<0 || y>=c || y<0)
    {
        return 0;
    }
    if(vis[x][y])
        return 0;
    return 1;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    deque<pair<int,pair<int,int> > >dq;
    scanf("%d",&t);
    //cin>>t;
    for(int i=0;i<t;i++)
    {
        dq.clear();
        scanf("%d %d",&r,&c);
       // cout<<r<<" "<<c<<endl;
      //  cin>>r>>c;
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                vis[i][j]=0;
                //dist[i][j]=0;
            }
        }
        for(int j=0;j<r;j++)
        {
            //for(int k=0;k<c;k++)
            //{
                scanf("%s",a[j]);
              //  cout<<"chars "<<a[j][k];
                //cin>>a[j][k];
           // }
        }
        for(int j=0;j<r;j++)
        {
            for(int k=0;k<c;k++)
            {
             //   cout<<a[j][k]<<" ";
            }
            //cout<<endl;
        }
    dq.push_back({0,{0,0}});

    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            dist[i][j]=INT_MAX;
        }
    }

    dist[0][0]=0;
    while(!dq.empty())
    {
        pair<int,pair<int,int> >p = dq.front();
        dq.pop_front();
        int x = p.first;
        int y = p.second.first;
        if(x==r-1 && y==c-1)
        	break;
        int wt = p.second.second;
        vis[x][y]=1;
        int X,Y;
        for(int i=0;i<4;i++)
        {
            X = x+dx[i];
            Y = y+dy[i];
            if(valid(X,Y))
            {
                if(a[X][Y]==a[x][y])
                {
                    dq.push_front({X,{Y,wt}});
                    dist[X][Y] = min(dist[X][Y],wt);
                }
                else
                {
                    dq.push_back({X,{Y,wt+1}});
                    dist[X][Y] = min(dist[X][Y],wt+1);
                }
            }
        }
    }
   // cout<<"reached"<<endl;
        //bfs(r,c);
     //   cout<<dist[r-1][c-1]-1<<"\n";
        printf("%d\n",dist[r-1][c-1]);
    }
    return 0;
}
