struct TreeNode *find(struct TreeNode* root,int max,int min)
{
    if(min<root->val&&max>root->val) return root;
    else if(min==root->val||max==root->val) return root;
    else if(max<root->val) return find(root->left,max,min);
    else return find(root->right,max,min);
}

int lowestCommonAncestor(struct TreeNode* root, int p, int q ) {
    int max=p>q?p:q,min=p<q?p:q;
    return find(root,max,min)->val;
}