P10234,TLE
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct noded{
string s;
ll val;
};
queue<pair<ll,ll>>q;
noded dist[2010][2010];
ll n,m;
ll movex[10]={-1,1,0,0};//up down left right
ll movey[10]={0,0,-1,1};
string moves[10]={"U","D","L","R"};
bool vis[2010][2010];
ll a[2010][2010],t;
void bfs(){
while(q.size())q.pop();
for(ll i=1;i<=n;i++){
for(ll j=1;j<=m;j++)
dist[i][j].val=LLONG_MAX,dist[i][j].s="",vis[i][j]=false;
}
dist[1][1].val=0;
q.push({1,1});
while(q.size()){
pair<ll,ll> fv=q.front();
vis[fv.first][fv.second]=true;
q.pop();
ll x=fv.first,y=fv.second;
if(x==n&&y==m){
cout<</*(*/dist[x][y].val/*==LLONG_MAX?-1:dist[x][y].val)*/<<endl;
/*if(dist[x][y].val!=LLONG_MAX)*/cout<<dist[x][y].s<<endl;
return;
}
for(ll i=0;i<4;i++){
ll mx=x+movex[i];
ll my=y+movey[i];
if(mx>n||my>m||mx<0||my<0)continue;
if(a[mx][my]==a[x][y])continue;
if(vis[mx][my])continue;
if(dist[mx][my].val<dist[x][y].val+1)continue;
dist[mx][my].val=dist[x][y].val+1;
dist[mx][my].s=dist[x][y].s+moves[i];
q.push({mx,my});
}
}
cout<<-1<<endl;
}
signed main(){
cin>>t;
while(t--){
cin>>n>>m;
for(ll i=1;i<=n;i++){
string sa;
cin>>sa;
for(ll j=1;j<=m;j++){
a[i][j]=sa[j-1];
}
}
bfs();
}
return 0;
}