#include <bits/stdc++.h>
#define ll int
#define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define deb(x) cout<<#x<<"="<<x<<endl;
#define endl '\n'
#define M 1000000007
// #define int long long
#define F first
#define S second
#define INF 1e18
#define N 200005

using namespace std;

ll n, m;
string g[2005];
ll dp[2005][2005];

ll go(ll x, ll y)
{
	if (x >= n || y >= m)return 0;
	ll &ans = dp[x][y];
	if (ans != -1e9)return ans;
	if (x + 1 < n)
		ans = max(ans, (g[x + 1][y] == '+' ? 1 : -1) - go(x + 1, y));
	if (y + 1 < m)
		ans = max(ans, (g[x][y + 1] == '+' ? 1 : -1) - go(x, y + 1));
	if (ans == -1e9)ans = 0;
	return ans;
}

void solve()
{
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
	{
		cin >> g[i];
	}
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < m; ++j)
		{
			dp[i][j] = -1e9;
		}
	}
	ll ans = go(0, 0);
	if (ans > 0)cout << "Takahashi" << endl;
	else if (ans < 0)cout << "Aoki" << endl;
	else cout << "Draw" << endl;
}

int32_t main()
{
	IOS
	ll T = 1;
	// cin >> T;
	for (ll i = 1; i <= T; ++i)
	{
		// cout<<"Case #"<<i<<": ";
		solve();
	}
	return 0;
}
//include <atcoder>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <tuple>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#define flush fflush(stdout)
#define endl '\n'
#define all(v) v.begin(), v.end()
#define pf(dans) printf("%.12lf", dans)
#define pfn(dans) pf(dans); cout << endl;
using namespace std;
//using namespace atcoder;
typedef long long ll;
typedef pair<int, int> P;
typedef pair<ll, ll> Pl;
const int mod1 = (int)1e9 + 7, mod2 = (int)998244353;
const int INF = (int)1e9 + 10;
const ll LINF = (ll)1e18 + 10;
const int di[8] = {1, 0, -1, 0, 1, 1, -1, -1}, dj[8] = {0, 1, 0, -1, -1, 1, -1, 1};

#define rep0(i, n) for (i = 0; i < n; i++)
#define rep1(i, a, b) for (i = a; i < b; i++)

template <typename T>
T my_abs(T x){
    return (x >= 0)? x : -x;
}

template <typename T>
void chmax(T &a, T b){
    a = max(a, b);
}

template <typename T>
void chmin(T &a, T b){
    a = min(a, b);
}

ll gcd(ll a, ll b){
    if (a > b) return gcd(b, a);
    if (a == 0) return b;
    return gcd(b % a, a);
}

bool incld_bit(ll bit, int i){
    return ((bit>>i) & 1) == 1;
}

// --------------------------------------------------------------------------------

int main(void){
    int i, j;
    ll a, b;

    cin >> a >> b;

    vector<int> p;
    rep0(i, 75){
        rep1(j, 2, i){
            if (i % j == 0){
                break;
            }
        }
        if (j == i){
            p.push_back(i);
        }
    }

    int snsbk[75] = {};
    rep0(i, b - a + 1){
        rep0(j, 20){
            if ((a + i) % p[j] == 0){
                snsbk[i] += (1<<j);
            }
        }
    }

    ll dp[75][(1<<20) + 3] = {};
    dp[0][0] = 1;
    rep0(i, b - a + 1){
        rep0(j, 1<<20){
            dp[i + 1][j] = dp[i][j];
            if ((j & snsbk[i]) == snsbk[i]){
                dp[i + 1][j] += dp[i][j - snsbk[i]];
            }
        }
    }

    ll ans;
    ans = 0;
    rep0(j, 1<<20){
        ans += dp[b - a + 1][j];
    }

    cout << ans << endl;

    return 0;
}