That depends. How many of those datastore ops are going to be reads, and how many are going to be writes? If they are all reads, with good use of cache-control headers (which don't use any quota at all if the data is cached outside your instance), you might even get down to free limitations. On the other hand, if every request is a full read-modify-write cycle, depending on how many indexes are on your entity, you could be talking about hundreds of dollars per month. Let's say you don't have any indexes at all - you still do 2 write ops for every put, one for the Kind index and one for the Key index. So that's 4 million writes and 2 million reads. 4 million @ $0.10/100k is $4 per day, 2 million @ $0.07/100k is $1.40, so just for the datastore costs you are talking $5.40 per day, or $162 per month with every index costing you another $60 / month. With the only information you gave us being 2 million datastore hits a day, if they are all only reads and you don't cache them anywhere, you are talking $1.40 a day ($42 a month).
Now, what that doesn't take into account is instances. 2 million requests per day is an average of about 24 per second. Depending on latency and memory usage of your app, you may need as few as 1 instance or 50 or more to pull that off. If your app is threadsafe and 24 distinct requests can fit in memory, you'll have 1 instance most of the time with spikes of 2 or 3, so you may not incur any overages in the average day. But if you can only fit 4 requests in memory, you'll average 6 instances all the time, or 6*24 = 144 instance hours per day -28 free = 116 instance hours per day * $0.05 per hour (assuming you reserve frontend instances) = $5.80 per day = $174 / month. If your app isn't threadsafe, and does that full read-modify-write cycle every time, you could need an average of 50 instances or more to handle the load, further increasing your cost.
In short, depending on how you optimize your application, you could range anywhere from $0 to $300 a month or more, with 2 million hits a day, depending on what those hits do and at what level of caching you integrate into your app. If you can effectively use cache-control headers, global module variable caching, and memcache, then the datastore cost of 2 million hits can be as few as a few hundred ops a day... well within the freebie category. If you don't have time to optimize for scalability (or every request demands the absolute latest data available), then the brute-force method is very expensive indeed.
Give us some more details and we can give you a better idea of what to expect.