#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(lli i = a; i < b; i++)
#define lli long long int
#define ld long double
#define all(v) v.begin(), v.end()
#define hell 1000000000000000
#define pb push_back
#define pf push_front
#define vi vector<lli>
#define vip vector<pair<lli, lli>>
#define F first
#define S second
#define pi 2*acos(0.0)
#define sz(s) s.size()
#define atmod (1000000000+7)
#define mod 998244353
// auto _C=clock();
/*
lli n = 10000000;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
vector<bool> p(n + 1, true);
void sieve()
{
    for (long long int i = 2; i * i <= n; i++)
    {
        if (p[i])
        {
            for (long long int j = i + i; j <= n; j = j + i)
            {
                p[j] = false;
            }
        }
    }
}
*/
/*
WINNERS NEVER QUIT AND QUITTERS NEVER WIN!!
 
Falling down is an accident, Staying down is a choice.
 
*/
/*
lli binpow(lli a, lli n,lli m)
{
    lli r = 1;
    a %=m ;
    while (n > 0)
    {
        if (n & 1)
        {
            r = (r * a)%m ;
        }
        a = (a * a)%m ;
        n = n / 2;
    }
    return r;
}
*/
/*bool cmp(pair<lli,lli> a,pair<lli,lli> b)
{
    if(a.F<b.F) return 1;
    else if(a.F==b.F) return(a.S>b.S);
    else return 0;
}*/
void solve()
{
    lli h,w;
    cin>>h>>w;
    vector<vector<lli>> g(h+1,vector<lli>(w+1,0));
    vector<vector<lli>> dp(h+1,vector<lli>(w+1,0));
    // max differnce between the score of the player 1 and player 2 if currently player 1 is moving
    rep(i,1,h+1)
    {
        rep(j,1,w+1)
        {
            char c;
            cin>>c;
            if(c == '+')
            {
                g[i][j] = 1;
            }
            else
            {
                g[i][j] = -1;
            }
        }
    }
    for(lli i = h;i >= 1; i--)
    {
        for(lli j = w;j >= 1; j--)
        {
            if(i==h&&j==w)
            {
                dp[i][j]=0;
            }
            else if(i==h)
            {
                dp[i][j] = g[i][j+1] - dp[i][j+1];
            }
            else if(j==w)
            {
                dp[i][j] = g[i+1][j] - dp[i+1][j];
            }
            else
            {
                dp[i][j] = max( g[i][j+1]-dp[i][j+1] , g[i+1][j]-dp[i+1][j] );
            }
        }
    }
    if(dp[1][1]>0)
    {
        cout<<"Takahashi";
    }
    else if(dp[1][1]<0)
    {
        cout<<"Aoki";
    }
    else
    {
        cout<<"Draw";
    }
}
int main()
{ 
    // ios_base::sync_with_stdio(false);
    // cin.tie(0);
    // cout.tie(0); 
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout); 
    // sieve();
    lli t = 1;  
    // cin >> t;
    rep(i,1,t+1)
    {
        solve();
    }
    // cerr<<"\n\n\nTime elapsed: ";
    // cout<<"\n"<<(double)(clock()-_C)*1000.0/CLOCKS_PER_SEC<<"ms\n";      
}




#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <iomanip>
#include <set>
#include <tuple>
#define mkp make_pair
#define mkt make_tuple
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define all(v) v.begin(),v.end()
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
template<class T> void chmin(T &a,const T &b){if(a>b) a=b;}
template<class T> void chmax(T &a,const T &b){if(a<b) a=b;}

ll gcd(ll a,ll b){
    return b==0?a:gcd(b,a%b);
}

const int L=72;

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);

  ll A,B;
  cin>>A>>B;

  vector<ll> v;
  for(ll i=A;i<=B;i++) v.push_back(i);
  int V=v.size();

  vector<int> is_prime(L+1,1);
  is_prime[0]=0;
  is_prime[1]=0;
  for(int i=2;i<=L;i++){
      if(is_prime[i]==0) continue;
      for(int j=2;i*j<=L;j++) is_prime[i*j]=0;
  }
  vector<int> primes;
  for(int i=2;i<=L;i++) if(is_prime[i]) primes.push_back(i);
  int P=primes.size();

  vector<vector<ll>> dp(V+1,vector<ll> (1<<P,0));
  dp[0][0]=1;
  for(int i=0;i<V;i++){
      for(int j=0;j<(1<<P);j++){
          ll value=dp[i][j];
          if(value==0) continue;
          dp[i+1][j]+=value;
          {
              int state=0;
              rep(k,P) if(v[i]%primes[k]==0) state+=(1<<k);
              if((j&state)==0) dp[i+1][j^state]+=value;
          }
      }
  }

  ll ans=0;
  rep(j,(1<<P)) ans+=dp[V][j];
  cout<<ans<<endl;

  return 0;
}
