#include <bits/stdc++.h>

// 1. dp
typedef long double ld;
#define int long long

#define gcd            __gcd
#define endl           "\n"
#define setbits(x)     __builtin_popcountll(x)
#define zrobits(x)     __builtin_ctzll(x)
#define mod            1000000007
#define mod2           998244353
#define maxe           *max_element
#define mine           *min_element
#define inf            1e18
#define pb             push_back
#define all(x)         x.begin(), x.end()
#define f              first
#define s              second
#define lb             lower_bound
#define ub             upper_bound
#define ins            insert
#define sz(x)          (int)(x).size()
#define mk             make_pair
#define deci(x, y)     fixed<<setprecision(y)<<x
#define w(t)           int t; cin>>t; while(t--)
#define nitin          ios_base::sync_with_stdio(false); cin.tie(nullptr)
#define PI             3.141592653589793238
using namespace std;

void solve() {
    int n,m;
    cin>>n>>m;
    vector<int>v;
    v.push_back(0);
    for(int i=0;i<m;i++)
    {
        int val;
        cin>>val;
        v.push_back(val);
    }
    sort(v.begin(),v.end());
    v.push_back(n+1);
    int ans=0;
    vector<int>nv;
    for(int i=1;i<=v.size()-1;i++)
    {
        if(v[i]!=v[i-1] && v[i]!=v[i-1]+1)
        nv.push_back(v[i]-v[i-1]-1);
    }
    if(nv.empty())
    {
        cout<<0<<endl;
        exit(0);
    }
    int val=mine(all(nv));
    for(auto c:nv)
    {
        ans+=c/val;
        if(c%val!=0)
            ans+=1;
    }
    cout<<ans<<endl;
}

int32_t main() {
    nitin;

    solve();
}

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

#define rep(i, a, b) for (auto i = (a); i < (b); ++i)
#define per(i, a, b) for (auto i = (b); i-- > (a); )
#define all(x) begin(x), end(x)
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) int((x).size())
#define lb(x...) lower_bound(x)
#define ub(x...) upper_bound(x)

template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int N = 1 << 11, inf = 1e9;
int dp[N][N], a[N][N];

void verdict(int x) {
	if (x == 0) cout << "Draw\n";
	else cout << (x > 0 ? "Takahashi" : "Aoki") << '\n';
	exit(0);
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m; cin >> n >> m;

	rep(i, 0, n) rep(j, 0, m) {
		char c; cin >> c;
		a[i][j] = c == '+' ? +1 : -1;
	}

	per(i, 0, n) {
		per(j, 0, m) {
			if (i == n - 1 && j == m - 1)
				dp[n - 1][m - 1] = 0;
			else if ((i + j) % 2 == 0) {
				// 0 maximizes
				dp[i][j] = -inf;
				if (i + 1 < n) ckmax(dp[i][j], dp[i + 1][j] + a[i + 1][j]);
				if (j + 1 < m) ckmax(dp[i][j], dp[i][j + 1] + a[i][j + 1]);
			} else {
				dp[i][j] = +inf;
				if (i + 1 < n) ckmin(dp[i][j], dp[i + 1][j] - a[i + 1][j]);
				if (j + 1 < m) ckmin(dp[i][j], dp[i][j + 1] - a[i][j + 1]);
			}
		}
	}
	verdict(dp[0][0]);
}