#include <bits/stdc++.h>
#define ll long long
#define lll long long
#define mp make_pair
#define pb push_back
#define inf 1000000001
#define vll vector <ll>

lll p = 1000000007;

using namespace std;

lll sq(lll i){
return i*i;
}


lll fact(ll n){
ll ans=1;
for(ll i=1; i<=n;i++)ans=(ans*i)%p;
return ans;

   }

unsigned long long power(unsigned long long x, ll y)
{
    unsigned long long res = 1; // Initialize result

    x = x % p; // Update x if it is more than p

    while (y > 0)
    {

        // If y is odd, multiply x with result
        if (y & 1)
            res = (res * x) % p;

        // y must be even now
        y = y >> 1; // y = y/2
        x = (x * x) % p;
    }
    return res;
}

lll modInverse(unsigned lll n, unsigned lll p)
{ return power(n, p - 2);
}


lll nCrModPFermat(unsigned lll n, unsigned lll r, lll fac[])
{
    // If n<r, then nCr should return 0
    if (n < r)
        return 0;
    // Base case
    if (r == 0)
        return 1;

    return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) % p;
}

vector <ll>  sieve(ll n){
    vector <bool> prime (n+1, true);
    prime[1]=false;

    vll primes;

    for(ll i=2; i<=sqrt(n); i++){
        if(prime[i]){
            for(ll j=i*i; j<=n; j+=i)prime[j]=false;
        }
    }

    for(ll i=2; i<=n;i++)if(prime[i])primes.pb(i);
        return primes;
}

vector <ll> factors(ll n){
    //vector <ll> primes = sieve(sqrt(n));
    vector <ll> v;
    for(ll i=2; i<=sqrt(n); i++){
        if(n%i==0){v.pb(i);v.pb(n/i);}
    }
    v.pb(n);
    //if(v.size()==0)v.pb(n);

    return v;
}

//***********************GRAPH ALGORITHMS*************************************************************

void dfs(vector <ll> v[], vector<ll> &df, ll cov[], ll i){ //Also outputed resultant dfs

    df.pb(i);
    for(ll j=0; j<v[i].size(); j++){if(cov[v[i][j]]==0){cov[v[i][j]]=cov[i]; dfs(v, df, cov, v[i][j]);}}
}

void djikstra (vector <pair<ll, ll>> v[], ll d[], ll par[], ll s, ll n){ //n^2 || d returns shortest dist // s for start

    for(ll i=0; i<n;i++){d[i]=inf; par[i]=-1;}
    par[s]=s; d[s]=0;
    bool cov[n]; for(ll i=0; i<n;i++)cov[i]=0;

    ll u=-1;

    for(int j=0; j<n;j++)
    {
        u=-1;
        for(ll i=0; i<n;i++){
        if(!cov[i] && (d[i]<d[u] || u==-1))u=i;
    }

    cov[u]=1;

    for(ll i=0; i<v[u].size(); i++){
        if(d[v[u][i].first] > d[u]+v[u][i].second){d[v[u][i].first]=d[u]+v[u][i].second; /*cout << d[u] << " " <<v[u][i].second <<"\n"; */par[v[u][i].first]=u;}
    }

}

}

ll bfs(vector<ll> v[], ll par[], ll root, ll finish, ll n) //par returns parent array
{
    ll cov[n];
    for(ll i=0; i<n;i++)cov[i]=0;
    queue<ll> q;
    cov[root]=0;
    q.push(root);
    while(!q.empty())
    {
       for(ll i=0;i<v[q.front()].size();i++)
       {
           if(cov[v[q.front()][i]]==0)
           {
               q.push(v[q.front()][i]);
               cov[v[q.front()][i]]=cov[q.front()]+1;
               par[v[q.front()][i]] = q.front();
           }
           if(v[q.front()][i]==finish)return cov[v[q.front()][i]];
       }
       q.pop();
    }
    return -1;
}

ll findConnComp(vector <ll> v[], ll cov[], ll n){
    ll j=0;
    vector <ll> df;
    for(ll i=0; i<n;i++)cov[i]=0;
    for(ll i=0; i<n; i++){
        if(!cov[i]){cov[i]=++j; dfs(v, df, cov, i);}
    }
    return j;
}

//*****************CODE STARTS **************************************

ll summ(ll a[], ll n){

    bool sp[n];
    for(ll i=0; i<n;i++)sp[i]=0;
    for(ll i=1; i<n-1; i++){
            if(a[i]>a[i-1] && a[i]>a[i+1])sp[i]=1;
            if(a[i]<a[i-1] && a[i]<a[i+1])sp[i]=1;
        }
    ll cnt=0;
     for(ll i=1; i<n-1; i++){
            if(sp[i])cnt++;
     }

     return cnt;
}

int main(){

    /*ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);*/

    ll x,y; cin >> x >> y;
    if(abs(x-y)>=3)cout << "No\n";
    else cout << "Yes\n";

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
typedef vector<int> vi;
typedef vector<vi> vvi;
int h,w;
vvi a(2010, vi(2010));
vvi opt(2010, vi(2010));

int main(){
  cin>>h>>w;
  rep(i,h)rep(j,w) {
    char A; cin>>A;
    if(A=='+') a[i][j]=1; else a[i][j]=-1;
  }
  opt[h-1][w-1]=0;
  for(int i=h-1; i>=0; i--) {
    for(int j=w-1; j>=0; j--) {
      if((i+j)%2==0) {
        int ma = -2000;
        if(i==h-1 && j==w-1) continue;
        if(i+1<=h-1) ma = max(ma,opt[i+1][j]+a[i+1][j]);
        if(j+1<=w-1) ma = max(ma,opt[i][j+1]+a[i][j+1]);
        opt[i][j] = ma;
      } else {
        int mi = 2000;
        if(i==h-1 && j==w-1) continue;
        if(i+1<=h-1) mi = min(mi,opt[i+1][j]-a[i+1][j]);
        if(j+1<=w-1) mi = min(mi,opt[i][j+1]-a[i][j+1]);
        opt[i][j] = mi;
      }
    }
  }
  if(opt[0][0]>0) puts("Takahashi");
  else if (opt[0][0]<0) puts("Aoki");
  else puts("Draw");
  return 0;
}
