#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;
const ll MOD = 1e9+7;
const ll INF = 1e18;
#define rep(i,m,n) for(ll i = (m); i <= (n); i++)
#define zep(i,m,n) for(ll i = (m); i < (n); i++)
#define rrep(i,m,n) for(ll i = (m); i >= (n); i--)
#define print(x) cout << (x) << endl;
#define printa(x,m,n) for(int i = (m); i <= n; i++){cout << (x[i]) << " ";} cout<<endl;

int main(){
    cin.tie(0); ios::sync_with_stdio(false);
    
    ll h, w; cin >> h >> w;
    string a[h]; zep(i, 0, h)cin >> a[i];
    if(h == 1 && w == 1){
        print("Draw") return 0;
    }

    ll dp[h][w];
    dp[h - 1][w - 1] = 0;
    if((h + w) % 2 == 0){
        if(a[h - 1][w - 1] == '+'){
            dp[h - 1][w - 1]--;
        }else{
            dp[h - 1][w - 1]++;
        }
    }else{
        if(a[h - 1][w - 1] == '+'){
            dp[h - 1][w - 1]++;
        }else{
            dp[h - 1][w - 1]--;
        }
    }
        
    
    rrep(i, h - 1, 0){
        rrep(j, w - 1, 0){
            if(i != h - 1 || j != w - 1){
                if(i == h - 1 && j != w - 1){
                    dp[i][j] = dp[i][j + 1];
                }else if(i != h - 1 && j == w - 1){
                    dp[i][j] = dp[i + 1][j];
                }else if(i != h - 1 && j != w - 1){
                    if((i + j) % 2 == 0){
                        if(dp[i + 1][j] > dp[i][j + 1]){
                            dp[i][j] = dp[i + 1][j];
                        }else{
                            dp[i][j] = dp[i][j + 1];
                        }
                    }else{
                        if(dp[i + 1][j] < dp[i][j + 1]){
                            dp[i][j] = dp[i + 1][j];
                        }else{
                            dp[i][j] = dp[i][j + 1];
                        }
                    }
                }

                if(i != 0 || j != 0){
                    if((i + j) % 2 == 0){
                        if(a[i][j] == '+'){
                            dp[i][j]--;
                        }else{
                            dp[i][j]++;
                        }
                    }else{
                        if(a[i][j] == '+'){
                            dp[i][j]++;
                        }else{
                            dp[i][j]--;
                        }
                    }
                }
            }
        }
    }

    if(dp[0][0] > 0){
        print("Takahashi")
    }else if(dp[0][0] < 0){
        print("Aoki")
    }else{
        print("Draw")
    }

    return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define lli               long long int
#define ulli              unsigned long long int
#define vi                vector<int>
#define ii                pair<int,int>
#define all(v)            v.begin(),v.end()
#define getunique(v)      {v.erase(unique(v.begin(),v.end()),v.end());}
#define pb                push_back
#define ff                first
#define ss                second
#define endl              "\n"
#define fast_io           ios_base::sync_with_stdio(false);cin.tie(NULL)

const int MS=1000001;
const lli INF=1e9+7;

template<typename T>
 bool comp(T a, T b){
  if(a<b)
    return true;
  return false;
 }
 int n,m;
  int get(int i, int j, vector<string> &v){
    if(i>=n || j>=m)
      return 0;
    if(v[i][j]=='-')
      return -1;
    return 1;
  }
  int dp[3000][3000][3];
 int solve(int i, int j, vector<string> &v, int inx){
  if(i>=n-1 && j>=m-1)
    return 0;
  // if(i>=n || j>=m)
  //   return 0;
  int add=0,a=0,b=0;
 // cout<<mine<<" "<<i+1<<" "<<j+1<<" "<<inx<<endl;
  if(dp[i][j][inx]!=-1)
    return dp[i][j][inx];
  if((inx==0)){
    a=get(i+1,j,v);
    b=get(i,j+1,v);
    if(i==n-1)
      return dp[i][j][inx]=b+solve(i,j+1,v,inx^1);
    else if(j==m-1)
      return dp[i][j][inx]=a+solve(i+1,j,v,inx^1);
   return dp[i][j][inx]=max(a+solve(i+1,j,v,inx^1),b+solve(i,j+1,v,inx^1));
  }
  else{
    a=get(i+1,j,v);
    b=get(i,j+1,v);
     if(i==n-1)
      return dp[i][j][inx]=-b+solve(i,j+1,v,inx^1);
    else if(j==m-1)
      return dp[i][j][inx]=-a+solve(i+1,j,v,inx^1);
    return dp[i][j][inx]=min(-a+solve(i+1,j,v,inx^1),-b+solve(i,j+1,v,inx^1));
  }
 // return add;
 }
int main(){
  //freopen("input.txt", "r", stdin);
  //freopen("output.txt", "w", stdout);
   fast_io;
   cin>>n>>m;
   vector<string> v(n);
   for(int i=0; i<n; i++)
    cin>>v[i];
  memset(dp,-1,sizeof dp);
  int ans=solve(0,0,v,0);
 // cout<<ans<<endl;
   if(ans>0)
    cout<<"Takahashi";
  else if(ans<0)
    cout<<"Aoki";
  else cout<<"Draw";

   

   
}