#include <bits/stdc++.h>
using namespace std;
using ll = long long;

void solve() {
    int h, w;
    cin>>h>>w;
    vector<string> grid(h);
    for(auto &i : grid) {
        cin>>i;
    }
    vector<vector<int>> dp(h, vector<int> (w, -1e9));
    for(int i=h-1; i>=0; i--) {
        for(int j=w-1; j>=0; j--) {
            if(i+1<h) {
                int option=-dp[i+1][j];
                if(grid[i+1][j]=='+') {
                    option++;
                } else {
                    option--;
                }
                dp[i][j]=max(dp[i][j], option);
            }
            if(j+1<w) {
                int option=-dp[i][j+1];
                if(grid[i][j+1]=='+') {
                    option++;
                } else {
                    option--;
                }
                dp[i][j]=max(dp[i][j], option);
            }
            if(i==h-1 && j==w-1) {
                dp[i][j]=0;
            }
        }
    }
    string ans="Takahashi";
    if(dp[0][0]<0) {
        ans="Aoki";
    } else if(dp[0][0]==0) {
        ans="Draw";
    }
    cout<<ans<<endl;
    return;
}

int main() {
#ifdef bipinpathak
    (void)!freopen("input.txt", "r", stdin);
    (void)!freopen("output.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    auto start=clock();
    int t = 1;
    //cin>>t;
    for(int i=0; i<t; i++) {
        //cout<<"Case #"<<i+1<<": ";
        solve();
    }
    double used= (double) (clock()-start);
    used=(used*1000)/CLOCKS_PER_SEC;
    cerr<<fixed<<setprecision(2)<<used<<" ms"<<endl;
    return 0;
}


#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int inf = 1e12;
#define D long double
#define NeedForSpeed ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int MOD = 1000000007;
#define fi first
#define se second
#define endl '\n'
// random_device rd;
// mt19937 rng(rd());
// int getRand(int l,int r){ // get random number in the range [l,r]
//   uniform_int_distribution<int> uid(l,r);
//   return uid(rng);
// }
const int N = 1e5 + 10;
int n , m ;
vector<string> a;
int dp[2001][2001][2]={0};
bool vis[2001][2001][2] = {0};

int rec(int i , int j , int z){
   if(i==n-1 && j==m-1)return 0;
   int & ans = dp[i][j][z];
   if(vis[i][j][z])return ans;
   vis[i][j][z] = 1;
   if(z==0){
     ans = -inf;
     if(j+1 < m) ans = max(ans,rec(i,j+1,1)+(a[i][j+1]=='+')-(a[i][j+1]=='-'));
     if(i+1 < n) ans = max(ans,rec(i+1,j,1)+(a[i+1][j]=='+')-(a[i+1][j]=='-'));
   }else{
     ans = inf;
     if(j+1 < m) ans = min(ans,rec(i,j+1,0)-(a[i][j+1]=='+')+(a[i][j+1]=='-'));
     if(i+1 < n) ans = min(ans,rec(i+1,j,0)-(a[i+1][j]=='+')+(a[i+1][j]=='-'));
   }
   return ans;
}

void go(){
   cin >> n >> m ; 
   a.resize(n);
   for(int i = 0 ; i < n ; i++)cin >> a[i];
   memset(dp,-1,sizeof(dp));
   int ans = rec(0,0,0);
   if(ans > 0)cout << "Takahashi" << endl;
   else if(ans < 0)cout << "Aoki" << endl;
   else  cout << "Draw" << endl;
} 

signed main() {
        // freopen("input.txt", "r", stdin);
        // freopen("output.txt", "w", stdout);
        NeedForSpeed
        int t = 1;
        cout << fixed << setprecision(12) ;
        // cin >> t;
        while(t--){
            // cout << "Case #" << cases << ": ";
            go();
        }

}